
2008-07-01:不需要自己亂改了,Blogger in draft 已提供 Embedded comment form 來做這件事。中文改造法可參考 小Ken思路不轉彎: [Blogger in draft] 新功能:Embedded Comment Form和Star Ratings安裝。
我的情形是在後台設定意見表單位置,然後找地方插入 <b:include data='post' name='comment-form'/>
就差不多了。
偶然逛到一個 blog: fREE2Software 發現他的留言表單就直接擺在頁面下方(首頁沒放,單篇文章才有),這配置我在 google 上找了很久都沒見過,現在才看到活生生、還會跑的。立刻看了他 blogger hack 分類下的文章,可惜暫時沒有寫到,於是自己試做,結果摘要:
- 寫成一般的 JavaScript,用修改模板的方式套用。
- 使用流程:按下留言按鈕後,才在頁面上顯示留言表單(iframe)。
- 未解決問題:ie 有時候看不到「視覺驗證」圖片。
- Firefox 頁面未完全載入時,開出來的 iframe 內容不保證正確。要修正的話,可以等頁面完全載入再用 JavaScript 改留言按鈕的 onclick 屬性。
- 表單還是很醜怪…… 所以我最後還是沒用它。
試用方式:
- 在模板的
</header>
前面加上:
- <script type='text/javascript'><!--
- var iframeHereHeight = '210px'; // iframe 高度
- function tryCommentHere(a,href) {
- // 若已有 iframe, 只做展開/收合
- if( a.nextSibling && a.nextSibling.nodeName.toLowerCase()=='iframe' && a.nextSibling.src==href ) {
- if( a.nextSibling.style.display != 'none' ) {
- a.nextSibling.style.display = 'none';
- }
- else {
- a.nextSibling.style.display = 'block';
- }
- return;
- }
- // 若沒有 iframe, 建立新的 iframe
- var newIframeNode = document.createElement('iframe');
- newIframeNode.setAttribute('src', href);
- newIframeNode.setAttribute('style', 'display:"block";');
- newIframeNode.setAttribute('margin', 'auto');
- newIframeNode.setAttribute('width', '90%');
- newIframeNode.setAttribute('height', iframeHereHeight);
- newIframeNode.setAttribute('frameborder', '1');
- newIframeNode.setAttribute('scrolling', 'auto');
- if( !a.nextSibling ) { a.parentNode.appendChild(newIframeNode); }
- else {
- a.parentNode.insertBefore( newIframeNode, a.nextSibling );
- }
- };
- //--></script>
<script type='text/javascript'><!-- var iframeHereHeight = '210px'; // iframe 高度 function tryCommentHere(a,href) { // 若已有 iframe, 只做展開/收合 if( a.nextSibling && a.nextSibling.nodeName.toLowerCase()=='iframe' && a.nextSibling.src==href ) { if( a.nextSibling.style.display != 'none' ) { a.nextSibling.style.display = 'none'; } else { a.nextSibling.style.display = 'block'; } return; } // 若沒有 iframe, 建立新的 iframe var newIframeNode = document.createElement('iframe'); newIframeNode.setAttribute('src', href); newIframeNode.setAttribute('style', 'display:"block";'); newIframeNode.setAttribute('margin', 'auto'); newIframeNode.setAttribute('width', '90%'); newIframeNode.setAttribute('height', iframeHereHeight); newIframeNode.setAttribute('frameborder', '1'); newIframeNode.setAttribute('scrolling', 'auto'); if( !a.nextSibling ) { a.parentNode.appendChild(newIframeNode); } else { a.parentNode.insertBefore( newIframeNode, a.nextSibling ); } }; //--></script>
- 然後找到「留下意見」連結的標記,類似
<a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'>留下意見</a>
,把 onclick 內容改為onclick="tryCommentHere(this, this.href); return false;"
就行了。
foobar2000 發佈了新版本 0.9.5,不過常被質疑的 Shuffle 行為還是沒變,狀況如下:
選擇 Shuffle (tracks) 播了幾首歌之後,回某一首重聽(一般是點滑鼠兩下),就會發現接下來播放的順序是固定的,跟剛剛聽過的一樣。理由可參考官網 FAQ,簡單講就是 Shuffle 只對播放清單做一次洗牌,所以如果要重聽某一首,然後再次打亂順序的話,有以下選擇:
- 重開 foobar2000
- 切換 Shuffle 選項(albums / folders / tracks)
- 一開始就不用 Shuffle,心存感激地改用 Random(0.9.5 把這選項加回來了)
以下作法沒用:
- 選擇 Playback 中的 Random,隨機跳下一首,再改回 Shuffle
- 選擇 Playback → Order 中的 Random,下一首後再改回 Shuffle
不過我 Order 改 Random 後卻發現 Previous(上一首)功能會失效變成停止,這樣太吃虧了(如果其他人都正常的話),所以最後還是放棄 Random,改用以下折衷法:
設定兩組快捷鍵做 Shuffle (folders) → Next 和 Shuffle (tracks) → Next
從此還是用 Shuffle (tracks) 播放,順序重複的時候再打開 foobar2000 按下兩組熱鍵。缺點是:
- Preference 裡會有圖中的 conflict(衝突)警告,詳見 Hydrogenaudio 知識庫 文件 Avoiding_conflicts。
- 必須叫出 foobar2000 視窗(熱鍵設 Global 好像會把第二個動作蓋掉)。
- 得分成兩組熱鍵(併為一個鍵 經測試沒效)。
- 最致命的是把 Shuffle 搞得跟 Random 一樣,會播到重複的曲子,這有道理嗎?