它有一種方法來重新加載一個腳本從greasemonkey?它有一種方法來重新加載一個greasemonkey腳本?
例如: 當我在某個特定網站上輸入時,來自greasemonkey的腳本正常工作,但是當我更改頁面時(我猜想網站中的asp),腳本不會重新加載才能生效。 。
我該如何解決?
它有一種方法來重新加載一個腳本從greasemonkey?它有一種方法來重新加載一個greasemonkey腳本?
例如: 當我在某個特定網站上輸入時,來自greasemonkey的腳本正常工作,但是當我更改頁面時(我猜想網站中的asp),腳本不會重新加載才能生效。 。
我該如何解決?
將Greasemonkey代碼包裝在一個函數中,然後設置文檔更改事件處理程序來調用它。像這樣...
/*--- To "refire" our Greasemonkey code on AJAX changes, we wrap it in
a function and call it on a DOM change event.
*/
var zGbl_DOM_ChangeTimer = '';
var bGbl_ChangeEventListenerInstalled = false;
/*--- Run everything after the document has loaded. Avoids race-
conditions and excessive "churn".
*/
window.addEventListener ("load", MainAction, false);
function MainAction()
{
if (!bGbl_ChangeEventListenerInstalled)
{
bGbl_ChangeEventListenerInstalled = true;
/*--- Notes:
(1) If the ajax loads to a specific node, add this
listener to that, instead of the whole body.
(2) iFrames may require different handling.
*/
document.addEventListener ("DOMSubtreeModified", HandleDOM_ChangeWithDelay, false);
}
//--- ****************************
//--- *** YOUR CODE GOES HERE. ***
//--- ****************************
}
function HandleDOM_ChangeWithDelay (zEvent)
{
/*--- DOM changes will come hundreds at a time, we wait a fraction
of a second after the LAST change in a batch.
*/
if (typeof zGbl_DOM_ChangeTimer == "number")
{
clearTimeout (zGbl_DOM_ChangeTimer);
zGbl_DOM_ChangeTimer = '';
}
zGbl_DOM_ChangeTimer = setTimeout (function() { MainAction(); }, 222); //-- 222 milliseconds
}
Greasemonkey應該適用於每一頁加載,所以我認爲你遇到的問題是由於用於有問題的userscript的@ include/@排除規則。你能指點我們這個用戶腳本的來源嗎?以及您在問題中提到的兩個頁面網址?
即使在AJAX頁面加載? – jibiel 2012-09-28 05:54:34
我的腳本似乎在頁面加載中運行。可能您正在觀察的行爲是當頁面使用AJAX並且頁面的一部分通過Javascript重新加載時。 – MZB 2010-06-15 03:15:41