2009-07-06 57 views
2

我有一個簡單的greasemonkey腳本,可以進行一些簡單的dom操作。在加載DOM之後,加載greasemonkey腳本,這很好,並且它適用於初始頁面。但是在這個網站上(這是twitter ;-))頁面的一部分被xmlhttprequest點擊後加載,這部分沒有被我的greasemonkeyscript操縱。如何在AJAX請求後加載greasemonkey腳本

在加載xmlhttprequest之後或DOM被請求改變之後,是否有簡單的可能性再次運行腳本?

回答

1

謝謝霍華德。這是正確的方向。

很難找到正確的入口點來劫持最小化腳本的函數。但是我發現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; 
    } 
3

當使用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注入自己的功能響應事件發生。