2016-01-27 41 views
0

我的Chrome擴展程序出現問題,取決於 chrome.tabs API。Chrome擴展程序:chrome.runtime.reload()後並非所有API都存在()

我的分機大多正常運行。有時候,我做了 chrome.runtime.reload()和作品大都沒有問題,但現在 ,然後(我既沒有能夠在預測或可靠 複製它),當後臺腳本重啓 的chrome.tabs引用undefined後回來。由於我依賴於該API 擴展無法啓動。該情況可以被檢測到,但是當我嘗試做chrome.runtime.reload()時,chrome.runtime.reload也是 undefined。那麼我沒有辦法重新啓動。

我意識到,我可能應該發展軟重啓功能 爲我的分機返回到空白狀態,但是這是非常正常工作 密集,所以我想問問社區,如果其他人有這個問題的任何 經驗,那麼在那種情況下,你怎麼解決 呢?

下面是從manifest.json文件我的權限:

"permissions": [ 
    "tabs", 
    "contextMenus", 
    "webNavigation", 
    "webRequest", 
    "webRequestBlocking", 
    /* some whitelisted web URLs... */ 
+1

我記得這是之前提到的,特別是https://stackoverflow.com/questions/34045969/chrome-extension-sometimes-undefined-in-background-js – Xan

+0

很高興知道,但有點壞消息,因爲它指向在Chromium中開啓顯然很難的錯誤。更重視我的避免'chrome.runtime.reload()'的理論,並在擴展本身中開發軟件重啓。 –

回答

0

非常感謝@Xan用於 指着我對this other 疑問,似乎涵蓋完全相同的現象。

我已經決定有足夠的跡象指出這是鉻在處理背景頁面時的錯誤 。

我也有一些額外的意見:

  • 問題指向@Xan必須在 Chrome的背景頁面可能錯誤引用。

  • 當我在我的 背景頁的開發者工具控制檯呼叫chrome.runtime.reload()複製的錯誤,我發現 chrome.runtime.reload()是可像往常一樣到我的分機 彈出UI。

  • 背景頁面(還)沒有過時,但在 documentation 第一行建議遷移到活動頁面,相反,他們不可能是 高鉻球隊的優先級列表。換句話說,我認爲 這個錯誤的風險 - 如果它是一個 - 有 分類爲'wontfix'的高風險,因此,嘗試 等待修復看起來沒有什麼效果。

因此,我設計了一個解決辦法,我認爲將是 滿意的,直到我有足夠的資源要麼開發在我的分機OR 軟重啓功能遷移到活動頁面:

鑑於即:

  • 我大部分的擴展功能通過一個瀏覽器 browserAction觸發。在瀏覽器動作開始呈現之前,我可以 向後臺頁面發佈消息,我知道它會立即回撥 。

  • 當擴展程序正常啓動時,修復程序將簡單地爲 無操作,對最終用戶不可見。

  • 由於修復正常操作是無操作的,如果Chromium團隊修復了未來版本中的錯誤,修復將不會損害 擴展。

  • 「死」後臺頁面將無法註冊任何消息 偵聽器。如果後臺頁面未響應安全檢查 消息,則彈出窗口可以通過重新啓動 擴展來修復損壞狀態。

這是有代價的:如果彈出超時等待的安全 網「消息,並重新啓動後,彈出的界面將是殘酷的封閉 沒有從下最終用戶的腳警告。不好 - 但在 一些考慮後,我決定,我認爲這種行爲遠比 更可取,而只是默默地停止工作,像 現在可以做的那樣。

評論,如果你有進一步的想法!

+0

背景頁面根本不被棄用;只是事件頁面更高效。您是否可以嘗試創建一個最小擴展名,以便在新配置文件中觸發您的錯誤,並將其發佈到https://code.google.com/p/chromium/issues/detail?id=565384?使用可重複的測試用例,更容易調試問題並在Chrome的一側進行修復。 –

+0

不,它不被棄用,但頂部有一個大紅色的「小心」。根據我的經驗,軟件項目往往避免支持他們不推薦的子系統。此外,原則上這是一個好主意,但我的擴展很大,而且我時間緊迫。爲了解決最嚴重的症狀,我可能會在晚些時候更正確地看待問題。 –

+0

您的問題顯示了webRequest API的用法,該API不能用於事件頁面:https://code.google.com/p/chromium/issues/detail?id=447270。 PS。我貢獻給Chrome,這看起來不像WontFix的bug,所以如果你提供了一個可靠的測試用例,這個bug實際上可能會得到修復。 –