23

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

4

2 回答 2

39

首先,您可能不希望脚本在 iFrame 中运行。您可以使用截至 2014 年 10 月现在在 Greasemonkey 和 Tampermonkey 中都
可以使用@noframes指令来阻止它。

对于旧版本或不支持的脚本引擎@noframes,您可以在元数据块之后使用此代码:

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


其次,您可以在页面加载时等待并触发您的 GM 代码。将所有内容包装在 a 中并在事件中main()调用它,如下所示:load

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

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


// @exclude 第三,您可以通过向元数据块添加指令来排除站点或页面。

总的来说,如果可能的话,最好避免普遍包含的 GM 脚本。

其他方法可能会设置标志或使用 URL 参数重新加载页面。这些变得棘手,因此将它们保存为最后的手段。

于 2010-11-16T02:07:27.210 回答
0

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

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

如何存储持久变量:GM_setValue

于 2010-11-16T02:09:15.420 回答