2013-02-17 94 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

相關問題