【问题标题】:Chrome extension: Execute background page only once when chrome startsChrome扩展程序:chrome启动时仅执行一次后台页面
【发布时间】:2013-07-12 01:24:55
【问题描述】:

我正在使用 chrome 扩展,我的清单加载了一个背景页面:

...
"background": { "scripts": ["background_page.js"], "persistent": false },
...

.js 代码如下所示:

var once = false;
window.addEventListener("load", function () {
  if ( once == true ) { return; }
  alert( 'test' );
  once = true;
}, false);

这似乎工作正常,但我想在每次浏览器启动时只运行一次 background_page.js 代码。

现在,我不知道为什么,但代码被执行了不止一次。起初我以为每次打开新标签时都会执行它,但事实并非如此。一旦我启动浏览器,警报就会出现,然后如果我快速打开一个新选项卡,警报将不会出现,但如果我等待大约 1 分钟左右并打开一个新选项卡,那么警报会再次出现。

如何确保每次浏览器启动时background_page.js 代码只运行一次?

【问题讨论】:

    标签: google-chrome google-chrome-extension browser browser-extension


    【解决方案1】:

    您使用的是Event Page(background_page.js)。当浏览器检测到页面没有做任何事情时,事件页面被卸载。所以发生的事情是,当您打开一个新选项卡时,事件页面正在重新加载并再次从顶部开始执行。这样,chrome 就可以让您的应用使用更少的内存并加快浏览器的速度。

    如果您想解决问题,只需使用persistent:true,这将确保页面无限期“持续”或直到用户关闭浏览器。如果您真的想通过内存保持您的应用程序高效,您应该查看每次卸载事件页面时调用的runtime.onSuspend 方法。这样,您可以在页面卸载之前保存内容,以便您可以从中断的地方继续。

    【讨论】:

    • 它非常有用,你能提供来源,你从哪里得到这个信息。谢谢!
    【解决方案2】:

    更新:根据current documentation,您只需删除persistent 键(无需将其更改为"persistent": true)。

    这是一个活动页面:

    {
      "name": "My extension",
      ...
      "background": {
        "scripts": ["eventPage.js"],
        "persistent": false
      },
      ...
    }
    

    这是一个背景页面:

    {
      "name": "My extension",
      ...
      "background": {
        "scripts": ["background.js"]
      },
      ...
    }
    

    【讨论】:

    • 更新链接?
    • @Pacerier 查看我的回答了解更多上下文。
    【解决方案3】:

    为了扩展 quackkkk 的答案,在 manifest.json 中省略 "persistent" 键与将其设置为 "persistent": true 相同

    证明:

    在docs 中,它说:

    保持后台脚本持续活动的唯一场合是 如果扩展使用 chrome.webRequest API 来阻止或修改网络 要求。 webRequest API 与非持久化不兼容 背景页面。

    考虑到这一点,我们可以查看manifest.json 扩展示例项目之一,No Cookies,它使用了 webRequest API,并看到它没有明确设置“持久”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多