2010-11-16 92 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