chrome.extension.getBackgroundPage() returns null

2019-02-18 15:27发布

When my chrome extension loads on chrome startup, everything seems to be ok and chrome.extension.getBackgroundPage() returns the right value (lunched from popup.js). But after awhile (2-3 minutes), especially if the browser is let alone, the function returns null. Only closing and re-opening chrome solves the problem. I tried to manipulate it by:

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

As suggested at Why does chrome.extension.getBackgroundPage() return null?, which sometimes helps, but most of the times it just keeps refreshing the app so that chrome must be closed. Does anybody have an idea what could be wrong?

2条回答
我欲成王,谁敢阻挡
2楼-- · 2019-02-18 15:50

According to the referenced page (Difference between Event and Background Page) there is a better option to get the background while still using Event Page :

If your extension uses, extension.getBackgroundPage, switch to runtime.getBackgroundPage instead. The newer method is asynchronous so that it can start the event page if necessary before returning it.

This worked well for me, just do your job in the asynchronous callback, which receives the background page as a function parameter.

Here is the specification of the method runtime.getBackgroundPage

查看更多
啃猪蹄的小仙女
3楼-- · 2019-02-18 16:16

Change your background(Event Page) to a real background Page.

Modify your manifest file from

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

to

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

Event pages are very similar to background pages, with one important difference: event pages are loaded only when they are needed. When the event page is not actively doing something, it is unloaded, freeing memory and other system resources.

Reference

查看更多
登录 后发表回答