javascript - Chrome 扩展 : getBackgroundPage() fails only occasionally

标签 javascript google-chrome google-chrome-extension

我正在开发一个 Chrome 扩展,下面的代码只是有时会导致错误,并非总是如此。大多数时候,这个扩展确实能正常工作,但有时它无法获取 getBackgroundPage() 并落入“else”部分。

在 popup.js 中

  var bg = chrome.extension.getBackgroundPage();
  if (bg) {
    bg.some_function();
  } else {
    this.updateStatus("Browser error. But you don't have to reload the page to fix it. Just switch to any other browser tab and return to fix.");
  }

后台页面由eventPage.js处理

list .json

"background": {
  "scripts": ["eventPage.js","jquery-2.1.1.min.js"],
  "persistent": false
},

此扩展作为 CMS 的辅助工具,提供高级“搜索和替换”功能。当用户在页面上的表单中编辑大量文本时,它往往会失败。可以通过重新加载页面或切换到任何其他选项卡然后返回该选项卡来解决。

popup.js getBackgroundPage() 失败是什么情况?
是否有任何解决方法可以避免此问题?

非常感谢您的见解!

最佳答案

您可能正在使用 Event Page ,即 list 中的 "persistent": false。如果闲置,它会被 Chrome 卸载。

specifically stated在文档中,chrome.extension.getBackgroundPage() 在这种情况下可能会失败,因为它是一种同步方法,如果事件页面已卸载,则不会立即返回任何内容。

要解决此问题,您应该改用 chrome.runtime.getBackgroundPage(callback)。它是异步的,能够等到后台页面为请求“启动”。

一般来说,考虑 chrome.extension API 在很大程度上(但不完全)弃用,取而代之的是一般的 runtime API。

关于javascript - Chrome 扩展 : getBackgroundPage() fails only occasionally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324643/

相关文章:

javascript - 为什么我的内容脚本不能使用已经注入(inject)的脚本?

google-chrome-extension - 如何从 webpack 构建中删除 eval 和 Function 构造函数以避免 CSP 问题

javascript - 我可以将 Google Analytics 添加到没有 popup.html 的 Chrome 扩展程序吗?

javascript - 使用 :target 时的 CSS 背景位置

javascript - 是否无法在 JavaScript 工作表中使用 <a href.. 等 HTML?

javascript - Google Apps 脚本在 Javascript 中获取 iFrame 的父 URL

css - 简单的 CSS 但在 Chrome 31 和 Safari 6 中的外观完全不同

javascript - Chrome : Debug who changes document. 位置.hash

javascript - Aurelia - 一种将分隔符添加到多级下拉菜单中的方法

google-chrome - 在 Google Chrome 中测试 Behat 脚本