【问题标题】:Run a Greasemonkey script only once per page load?每个页面加载只运行一次 Greasemonkey 脚本?
【发布时间】:2011-05-10 13:54:22
【问题描述】:

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

【问题讨论】:

    标签: javascript greasemonkey tampermonkey


    【解决方案1】:

    首先,您可能不希望脚本在 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 参数重新加载页面。这些会变得很棘手,因此请将它们保存为最后的手段。

    【讨论】:

    【解决方案2】:

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

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

    如何存储持久变量:GM_setValue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 2014-10-18
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多