我正在开发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
处理的manifest.json
"background": {
"scripts": ["eventPage.js","jquery-2.1.1.min.js"],
"persistent": false
},
此扩展程序可用作CMS的帮助工具,并提供高级"搜索&替换"特征。当用户在页面上编辑表单中的大量文本时,它往往会失败。它可以通过重新加载页面或切换到任何其他选项卡然后返回选项卡来解决。
当popup.js无法获得getBackgroundPage()时,是什么时候? 是否有任何解决方法可以避免这个问题?
非常感谢您的见解!
答案 0 :(得分:2)
您可能在清单中使用Event Page,即"persistent" : false
。如果处于闲置状态,Chrome会将其卸载。
chrome.extension.getBackgroundPage()
文档中的specifically stated在这种情况下可能会失败,因为它是一个同步方法,如果事件页面被卸载,则无法立即返回。
要解决此问题,您应该使用chrome.runtime.getBackgroundPage(callback)
代替。它是异步的,并且能够等到后台页面为请求“旋转”。
一般情况下,请考虑chrome.extension
API主要(但不完全)弃用,而采用一般runtime
API。