Javascript 每次页面加载仅运行一次Greasemonkey脚本?

Javascript 每次页面加载仅运行一次Greasemonkey脚本?,javascript,greasemonkey,tampermonkey,Javascript,Greasemonkey,Tampermonkey,如果您使用@include*创建Greasemonkey脚本,并访问youtube之类的网站,则每次刷新时它都会运行该脚本20多次以上。这是在Firefox上,不确定Chrome。 有没有办法防止这种情况发生?首先,您可能不希望脚本在iFrame中运行。 从2014年10月起,您可以阻止现在在Greasemonkey和Tampermonkey中都有效的使用 对于旧版本,或者对于不支持@noframes的脚本引擎,可以在元数据块之后使用以下代码: if (window.top != window.

如果您使用
@include*
创建Greasemonkey脚本,并访问youtube之类的网站,则每次刷新时它都会运行该脚本20多次以上。这是在Firefox上,不确定Chrome。

有没有办法防止这种情况发生?

首先,您可能不希望脚本在iFrame中运行。
从2014年10月起,您可以阻止现在在Greasemonkey和Tampermonkey中都有效的使用

对于旧版本,或者对于不支持
@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参数重新加载页面。这些都很棘手,所以将其保存为最后手段。

例如,您可以将给定位置存储在持久变量中。 在页面加载时,必须检查当前位置是否已存储在此变量中

如果不是,则设置变量并运行函数,如果是,则不执行任何操作


如何存储持久变量:

刚刚查看了youtube,iFrame要少得多。我的建议是
gmu日志(location.href)
并缩小@include@noframes会有帮助,但尚未实现-