我有一個簡單的greasemonkey腳本,可以進行一些簡單的dom操作。在加載DOM之後,加載greasemonkey腳本,這很好,並且它適用於初始頁面。但是在這個網站上(這是twitter ;-))頁面的一部分被xmlhttprequest點擊後加載,這部分沒有被我的greasemonkeyscript操縱。如何在AJAX請求後加載greasemonkey腳本
在加載xmlhttprequest之後或DOM被請求改變之後,是否有簡單的可能性再次運行腳本?
我有一個簡單的greasemonkey腳本,可以進行一些簡單的dom操作。在加載DOM之後,加載greasemonkey腳本,這很好,並且它適用於初始頁面。但是在這個網站上(這是twitter ;-))頁面的一部分被xmlhttprequest點擊後加載,這部分沒有被我的greasemonkeyscript操縱。如何在AJAX請求後加載greasemonkey腳本
在加載xmlhttprequest之後或DOM被請求改變之後,是否有簡單的可能性再次運行腳本?
謝謝霍華德。這是正確的方向。
很難找到正確的入口點來劫持最小化腳本的函數。但是我發現twitter腳本中存在一些問題。它在Ajax請求後調用window.onPageChange。 (我不知道這是否是JavaScript中的常見最佳做法,如果其他人也這樣做)我在http://userscripts.org/scripts/review/47998上發現了一些代碼,它確實使用此posibility來附加事件。
if (typeof unsafeWindow.onPageChange === 'function') {
var _onPageChange = unsafeWindow.onPageChange;
unsafeWindow.onPageChange = function(){
_onPageChange();
filter();
};
} else {
unsafeWindow.onPageChange = filter;
}
當使用Greasemonkey時,一個強大的技術是'劫持'現有的JavaScript函數。如果你改變頁面有一個名爲processAjaxResponse
功能時,處理XmlHttpRequest
響應它被調用時,你可以在你的Greasemonkey腳本如下:
var originalProcessAjaxResponse;
function myNewProcessAjaxResponse() {
/* Manipulate DOM if you need to, and then... */
originalProcessAjaxResponse();
}
function hijack() {
var originalProcessAjaxResponse = processAjaxResponse;
processAjaxResponse = myNewProcessAjaxResponse();
}
這可以讓你在AJAX注入自己的功能響應事件發生。