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