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 ,即 "persistent" : false在 list 中。如果闲置,它会被 Chrome 卸载。

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

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

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

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

相关文章:

ajax - 为什么 Chrome 取消 CORS OPTION 请求

javascript - DOM功能可在控制台中使用,但不能在扩展中使用,尽管它正在等待加载

javascript - Chrome pageAction Extensions在多个网站上

javascript - 如何强制悬停选择器不会出现在特定的 div 上

javascript - Flatpickr 即时更改 minDate maxDate

python - WebDriverException : Message: Service/content/chromedriver unexpectedly exited. 状态代码为:-6 使用 ChromeDriver Google Colab 和 Selenium

google-chrome - 如何私下测试因未在 Chrome Web Store 中列出而被禁用的 Chrome 扩展程序

javascript - Chrome 扩展程序 - 自动运行

javascript - 无法在选择器工作中获取jQuery'+ variable +'

javascript - js-检查相同的类元素是否具有id