更新后,Chrome扩展程序上下文菜单无效

时间:2015-11-20 19:39:27

标签: google-chrome google-chrome-extension contextmenu

我有一个扩展程序,我最近推送了具有更新权限的更新。有些用户正在升级并报告应用在更新后无法正常工作,为了让它再次运行,他们必须完全卸载应用并重新安装,一切正常。

有没有人遇到过类似的问题?对我来说,测试所有更新都是正确的,并不是每个人都遇到这个问题,但它正在成为一个问题。

需要注意的事项 - 弹出式选项卡确实可以正常运行它。

编辑 - 除了从用户那里获取报告之外,我无法复制并且没有明确的方法来测试这一点。我确实注意到在部署了另一个更新之后报告有所下降,我调整了权限的顺序...我不知道这是如何相关的,但我正在寻找任何明确的原因,为什么会发生这种情况,如果有一些事情可以做,以避免将来。

1 个答案:

答案 0 :(得分:1)

您正在chrome.runtime.onInstalled事件的侦听器中创建上下文菜单项。这是创建上下文菜单项的文档化建议方法,但由于Chrome中存在错误(crbug.com/388231crbug.com/389631crbug.com/264963),因此并不总是触发它。

我想在您的情况下,权限更新导致扩展程序被禁用,然后chrome.runtime.onInstalled因重新启用crbug.com/388231而未再触发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.

解决此错误的方法是使用短计时器并尝试更新应该创建的上下文菜单项。如果未触发onInstalled事件,则不会创建上下文菜单,尝试更新它将失败。然后可以使用此条件来确保正确创建上下文菜单。

babel-cli