2015-11-20 84 views
0

我有一個擴展,我最近推送更新的權限更新。有些用戶正在升級並報告說,更新後應用程序無法運行,爲了使其再次運行,他們必須完全卸載應用程序並重新安裝,並且一切正常。Chrome擴展上下文菜單更新後不工作

有沒有人有類似的問題?對於我來說,測試一切正確更新,並不是每個人都有這個問題,但它正在成爲一個問題。

需要注意的是 - 彈出選項卡不起作用它只是存在問題的上下文菜單。

編輯 - 我無法複製,也沒有明確的方式來測試這個,除了從用戶獲取報告。在調整權限順序後,我部署了另一個更新後,我注意到報告有所下降......我不明白這是如何相關的,但我希望澄清爲什麼會發生這種情況,以及是否存在可以做到的事情,以避免在未來。

+0

您是否已經嘗試重現該錯誤?如果是的話,你是否還試圖創建一個顯示該錯誤的簡化測試用例?你使用的是哪個版本的Chrome? –

+0

特別添加/刪除/更新了哪些權限? – wOxxOm

+0

@RobW我無法複製。它遍佈各處,我添加了一個啓動和oninstall事件監聽器,對我而言,它始終正確地創建上下文菜單。對於其他人來說,它似乎根本無法工作。 –

回答

1

您正在chrome.runtime.onInstalled事件的偵聽器中創建上下文菜單項。這是創建上下文菜單項的文檔化和推薦的方式,但由於Chrome中的錯誤(crbug.com/388231crbug.com/389631,crbug.com/264963),並不總是會觸發它。

我想你的情況許可更新導致擴展被禁用,然後chrome.runtime.onInstalled因爲crbug.com/388231重新啓用後不再被觸發。

解決此問題的方法是使用短計時器並嘗試更新應該創建的上下文菜單項。如果未觸發onInstalled事件,則不會創建上下文菜單,嘗試更新它將會失敗。然後可以使用此條件來確保正確創建上下文菜單。

var SOME_CONTEXTMENU_ID = "GifMeContextMenu"; 

function onInstalled() { 
    // ... do your thing, e.g. creating a context menu item: 
    chrome.contextMenus.create({ 
     "title": "GifMe", 
     "contexts": ["image"], 
     "id": SOME_CONTEXTMENU_ID 
    }); 
} 

// Should be triggered whenever the extension or browser is 
// reloaded, installed or updated. 
chrome.runtime.onInstalled.addListener(onInstalled); 

setTimeout(function() { 
    // This .update() call does not change the context menu if it exists, 
    // but sets chrome.runtime.lastError if the menu does not exist. 
    chrome.contextMenus.update(SOME_CONTEXTMENU_ID, {}, function() { 
     if (chrome.runtime.lastError) { 
      // Assume that crbug.com/388231 occured, manually call the 
      // onInstalled handler. 
      onInstalled(); 
     } 
    }); 
}, 222); // <-- Some short timeout. 
+0

這非常有意義,謝謝!也很好挖;) –