2010-11-16 93 views
21

如果您使用@include *創建Greasemonkey腳本並轉到諸如youtube之類的站點,則每次刷新時都會運行腳本20次以上。這是在Firefox上,不知道關於Chrome。
有沒有辦法來防止這種情況?每頁加載只運行一次Greasemonkey腳本?

回答

35

首先,您可能不希望腳本在iFrame中運行。
您可以阻止使用the @noframes directive現在工作在兩個的Greasemonkey和Tampermonkey截至10月,2014年

對於舊版本,或腳本引擎不支持@noframes,您可以使用此代碼,剛過元數據塊:

if (window.top != window.self) //don't run on frames or iframes 
{ 
    //Optional: GM_log ('In frame'); 
    return; 
} 


其次,你可以等待,解僱你的GM碼,有一次,在頁面加載。在main()總結一切,並調用它的load事件,像這樣:

window.addEventListener ("load", LocalMain, false); 

function LocalMain() { 
    // Your code goes here. 
} 


第三,你可以通過添加// @exclude指令的元數據塊排除網站或網頁。

總體而言,如果可能的話,最好避免使用通用的GM腳本。

其他方法可能會設置標誌或使用URL參數重新加載頁面。這些變得棘手,因此將它們保存爲最後的手段。

+1

只是檢查YouTube上,有少得多的I幀。我的建議是'GM_log(location.href)'和狹窄的@include。 – 2010-11-16 02:17:42

+1

這解決了我的問題。謝謝! – Joren 2010-11-16 02:33:23

+2

@Joren:不客氣。樂意效勞。 – 2010-11-16 02:41:12

0

例如,您可以將給定的位置存儲在持久變量中。 在頁面加載時,如果當前位置已存儲在此變量中,您必須檢查。

如果沒有,則設置該變量並運行您的函數,如果是,則不執行任何操作。

如何存儲持久性變量:GM_setValue

相關問題