您正在chrome.runtime.onInstalled
事件的偵聽器中創建上下文菜單項。這是創建上下文菜單項的文檔化和推薦的方式,但由於Chrome中的錯誤(crbug.com/388231,crbug.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.
您是否已經嘗試重現該錯誤?如果是的話,你是否還試圖創建一個顯示該錯誤的簡化測試用例?你使用的是哪個版本的Chrome? –
特別添加/刪除/更新了哪些權限? – wOxxOm
@RobW我無法複製。它遍佈各處,我添加了一個啓動和oninstall事件監聽器,對我而言,它始終正確地創建上下文菜單。對於其他人來說,它似乎根本無法工作。 –