每页加载只运行一次Greasemonkey脚本?

时间:2010-11-16 01:32:18

标签: javascript greasemonkey tampermonkey

如果您使用@include *创建Greasemonkey脚本并转到像youtube这样的网站,则每次刷新时它都会运行脚本20次以上。这是在Firefox上,不确定Chrome 有办法防止这种情况吗?

2 个答案:

答案 0 :(得分:35)

首先,您可能不希望脚本在iFrame中运行 你可以使用the @noframes directive阻止它,它现在可以在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参数重新加载页面。这些变得棘手,所以将它们作为最后的手段来保存。

答案 1 :(得分:0)

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

如果没有,你设置变量并运行你的函数,如果是什么都不做。

如何存储持久变量:GM_setValue