4

当我的 chrome 扩展在 chrome 启动时加载时,一切似乎都正常,并且 chrome.extension.getBackgroundPage() 返回正确的值(从 popup.js 午餐)。但过了一会儿(2-3 分钟),特别是如果不考虑浏览器,该函数返回 null。只有关闭和重新打开 chrome 才能解决问题。我试图通过以下方式操纵它:

if (chrome.extension.getBackgroundPage() == null) window.location.reload(true);

正如在Why does chrome.extension.getBackgroundPage() return null 中所建议的那样?,这有时会有所帮助,但大多数时候它只是不断刷新应用程序,因此必须关闭 chrome。有人知道可能出了什么问题吗?

4

2 回答 2

8

根据引用的页面(事件和背景页面之间的区别),有一个更好的选择来获取背景,同时仍然使用事件页面:

如果您的扩展使用 extension.getBackgroundPage,请改用 runtime.getBackgroundPage。较新的方法是异步的,因此如果需要,它可以在返回之前启动事件页面。

这对我来说效果很好,只需在异步回调中完成你的工作,它接收背景页面作为函数参数。

这是方法runtime.getBackgroundPage的规范

于 2013-04-02T14:47:35.240 回答
3

将您的背景(事件页面)更改为真实的背景页面。

修改清单文件

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

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

事件页面与背景页面非常相似,但有一个重要区别:事件页面仅在需要时加载。当事件页面没有主动做某事时,它会被卸载,释放内存和其他系统资源。

参考

于 2013-02-17T17:24:47.430 回答