【发布时间】:2011-05-10 13:54:22
【问题描述】:
如果您使用 @include * 创建 Greasemonkey 脚本并访问 youtube 等网站,则每次刷新时它都会运行该脚本 20 次以上。这是在 Firefox 上,不确定 Chrome。
有没有办法防止这种情况发生?
【问题讨论】:
标签: javascript greasemonkey tampermonkey
如果您使用 @include * 创建 Greasemonkey 脚本并访问 youtube 等网站,则每次刷新时它都会运行该脚本 20 次以上。这是在 Firefox 上,不确定 Chrome。
有没有办法防止这种情况发生?
【问题讨论】:
标签: javascript greasemonkey tampermonkey
首先,您可能不希望脚本在 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 参数重新加载页面。这些会变得很棘手,因此请将它们保存为最后的手段。
【讨论】:
GM_log(location.href) 和缩小@include。
【讨论】: