我正在开发一个 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/