2013-02-17 118 views
3

当我的chrome扩展在chrome启动时加载时,一切似乎都正常,chrome.extension.getBackgroundPage()返回正确的值(从popup.js中启动)。但过了一段时间(2-3分钟)后,特别是如果浏览器不起作用,该函数将返回null。只有关闭并重新打开chrome才能解决问题。 我试图通过操纵它:chrome.extension.getBackgroundPage()在一段时间后返回null

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

截至Why does chrome.extension.getBackgroundPage() return null?,有时帮助的建议,但多数只是不断刷新的应用程序,以便铬必须是封闭的时代。 有没有人有一个想法可能是错的?

+0

的规格你能发布更多的代码或代码上下文的至少一部分的? – 2013-02-17 14:20:52

回答

6

根据所引用的页面(Difference between Event and Background Page)有一个更好的选择,以获得背景,同时还利用活动页面:

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

这对我来说很好,只是在异步回调中完成您的工作,它将接收背景页作为函数参数。

这里是方法runtime.getBackgroundPage

+2

你应该用字符'>'来重新格式化它,而不是4个空格! – 2013-04-02 15:04:46

1

将您的背景(活动页面)更改为真实背景页面。

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

修改清单文件,以

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

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

参考

+0

请注意,事件页面优于所谓的“真实”背景页面。从您发布的参考链接中获得:[“从Chrome 22开始,稳定版频道提供了活动页面,性能优势非常明显,特别是在低功耗设备上。请尽量选择持久背景页面,以便进行新开发并开始迁移现有的背景页面添加到这个新模型中。“](https://developer.chrome.com/extensions/event_pages) – 2017-02-01 20:49:43