沒穿方服

索引

顯示╱隱藏內文

可以插好多的表單

最近有些 blogger 管理者把留言表單拿掉了,換成彈出視窗,或整頁模式。

這支 bookmarklet 會試著把表單塞回網頁:
自助嵌入 blogger 留言表單


用了沒反應,蛤~怎會這樣?

1)僅在「單篇文章」頁面有用。 2)因各人模板不同,也可能沒效。 3)只支援 Firefox、Google Chrome、Opera 和 Safari 等。

原始碼拆開如下:

var cmt_div = document.getElementById("comments");
var url, anchor, a = cmt_div.getElementsByTagName("a");
for( i = 0 ; i < a.length ; i++ ) {
  if( a[i].hasAttribute("href") && a[i].getAttribute("href").match(/g\?blogID=([0-9]+)\&postID=([0-9]+)/) ) {
    url = 'http://www.blogger.com/comment-iframe.g?blogID=' + RegExp.$1 + '&postID=' + RegExp.$2;
    anchor = a[i];
  }
}
cmt_iframe = document.createElement("object");
cmt_iframe.setAttribute('data', url);
cmt_iframe.setAttribute('style', 'display:block; width:100%; height:250px; color:#000; background-color:#f4f1f4; opacity:0.95; padding:0 4px; margin:2px 0; border:2px solid #fff;');
anchor.parentNode.insertBefore( cmt_iframe, anchor.nextSibling );
window.scrollTo( cmt_div.offsetLeft, cmt_div.offsetTop );

不曉得哪時候開始,用 ie 開某些 blogger 的單篇文章會顯示「操作已中止」錯誤:

讀取到一半,操作已中止 然後就無法顯示網頁

重現方法之一,是在 blogger 後台「意見設定」將「意見欄位置」改為「已內嵌下列文章」,然後在「版面配置」新增 MyBlogLog 的小工具,再用 ie 6 開啟單篇文章網址,就爆了。

關鍵是 blogger 內嵌意見表單的原始碼,裡面的 BLOG_CMT_createIframe 跟 ie 不合,如果把這句延到頁面讀完再執行,可以避開「操作已中止」錯誤:

// 以下是在模板內
if ( document.addEventListener ) {
  document.addEventListener( &quot;DOMContentLoaded&quot;, function(){
    BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;, &#39;<data:post.communityId/>&#39;);
  }, false );
}
else if ( document.attachEvent ) {    // ie 跑這邊
  window.attachEvent(&quot;onload&quot;, function(){
    BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;, &#39;<data:post.communityId/>&#39;);
  });
}

不過即使如此,測試留言功能依然失敗,送出時會發生「存取被拒」。


我的建議是:除了內嵌表單,最好也弄個鏈結到留言頁面,例如這個 blog 在單篇文章可以點「張貼意見」旁的小傘標 ☂(ie 可能會顯示方框)看到效果。原理可參考舊文 內嵌留言表單 + 彈出留言視窗 中的 手動插入「彈出留言視窗」鏈結

不然使用者關掉 JavaScript 會找不到地方留言。

陽春的 blogspot 連留言編號都要自己做,來龍去脈請見 Abin's Tech Note: 增加文章留言回應的編號 寫得很清楚。作法方面除了該篇採用的 JavaScript 外,也可考慮 CSS counter,在樣式裡加上:

.comments {counter-reset: count;}
.comment-timestamp:before {
  content: counter(count) '.';
  counter-increment: count;
}

其中 count 變數可以隨意改名,content 屬性也可作變化,稍微搜尋一下應該就有參考了。

格式可以稍做變化

※很舊的瀏覽器不支援(我真好心,每次都提這個)

Blogger 預設模板 <header> 中有一行 <b:include data='blog' name='all-head-content'/> 會自動插入有用的 meta(版權、編碼等)、link(預設 Feed 網址等)和其他。

幾個原因考慮刪除:

  1. 會自動插入預設的 favicon,順序沒弄好的話會蓋掉手動加的 favicon。
    參考這篇 Blogger Buster: Fixing Custom Favicons for Blogger Blogs
  2. 會自動插入 MSSmartTagsPreventParsing 這個 meta 項目,防止微軟跑聰明標籤?
  3. 最近又默默加了一段語法,內容可參考 七月佑安: 解決Blogger下jstiming和_WidgetManager未定義的錯誤(但該文結尾並不刪除 'all-head-content');這段語法除了無預警塞進來外,裡面的 & 符號也會在 HTML 驗證造成 9 個錯誤。

只是如第三點的連結中所說,要是刪了,日後說不定又會出問題。

心一橫把 Prototype 拆掉換成 jQuery。 前輩,別了!

轉職後裝的裝備也不一樣:
prototype 1.6.0.3 jQuery 1.3.2 感覺到
燈箱 Lightbox 2 jQuery lightBox plugin esc 鍵有問題要自改
音效 Javascript Sound Kit flashSound
餅乾罐 Cookie Jar jquery.cookie.js
jquery.json.js
jQuery cookieJar
好,不過分好多檔
螢光筆 SyntaxHighlighter 1.5.1 同左(這套跟 lib 無關) PayPal 沒錢不能用 2.0
bg 動畫 script.aculo.us jquery.backgroundPosition 好,解放不少空間

也順便試試一直很好奇的 最新回應 2.0 by LVCHEN,果然超級容易安裝(而且還很好玩~)玩著玩著還把它抓回來、改無關緊要的地方(例如 <a> 換成 <input>)……下次升級我就麻煩啦。