2007年2月24日 星期六

Blogger Hack Tip #1 - Hacking Blogger index.html

新增了一個 Blogger Hack Tip 專題,將我修改的心得以及大家問的問題,做一個整理及備忘。

也希望大家不吝指教,一起切磋。



How to hacking Blogger index.html:

我要如何在新版本 (Blogger beta) 首頁(index.html) hack 功能? 為什麼我寫的 javascript 運作正常,但按了最下方的"較新的文章" "較舊的文章" 後便沒有作用了?

##CONTINUE##

Tip #1:

這個 Tip 就是阿土伯用在處理繼續閱讀的方式。

由於新版本(Blogger beta)增加了 "較新的文章" "較舊的文章" 功能,然而它是利用 XHR 的方式運作,所以頁面並未 Reload。對於大部份 hack 的 javascript 來說,它是運作於 document.onload 或 dom ready 時機,所以無法於換頁後運作。



所以我們必需觀察 Blogger 它的 XHR Response handle ,然後進行 Hooking 。這個方式可以用在任何 ajax 程式中加掛您想擴充的功能。



以 Blogger beta 來說,它的 Response handle 是 _WidgetManager._HandleControllerResult ,所以我們就對它下手嘍。



原程式流程:



XHR Request - XHR Response - _WidgetManager._HandleControllerResult



新程式流程:



XHR Request - XHR Response - MyFunction - _WidgetManager._HandleControllerResult





以 Javascript 來實作,最容易的方式就是以新的 MyFunction 取代 _WidgetManager._HandleControllerResult ,然後在 MyFunction 中利用 Function.apply 呼叫原 _WidgetManager._HandleControllerResult 即可完成。



附上繼續閱讀功能的 Hooking Source Code:



// Try hook Blogger _WidgetManager_HandleControllerResult

if(BloggerExt.isListMode() (typeof BloggerExt._WidgetManager_HandleControllerResult == 'undefined') ) {

BloggerExt._WidgetManager_HandleControllerResult = _WidgetManager._HandleControllerResult;

_WidgetManager._HandleControllerResult = function() {

try {

// Call _WidgetManager_HandleControllerResult

BloggerExt._WidgetManager_HandleControllerResult.apply(this, arguments);

// replace_continue_markup

BloggerExt.replace_continue_markup();

}catch(e) {

}

}

}









Technorati Tags: , ,

1 則留言:

yitafan 提到...

嗯? 請問一下要怎麼看出現在blogger 的版本? 我套用了您修改後的js檔. 找來找去還是找不到read more在那裏. 可否請您幫我看一下. 底下是我的blog
http://idarfan.blogspot.com/