The chrome.runtime API有一些事件可以用来将侦听器添加到上下文菜单。目前我正在使用chrome.runtime.onStartup
像这样:
chrome.runtime.onStartup.addListener(function() {
chrome.contextMenus.create({
'title': 'Add: %s',
'contexts': ['selection']
});
});
chrome.contextMenus.onClicked.addListener(onClickHandler);
问题是chrome.runtime.onStartup
将在用户启动或重新启动 Chrome 时运行,并且chrome.runtime.onInstalled
首次安装或更新扩展程序或 Chrome 时将起作用。
如果我只做onStartup
,那么当我的扩展程序或 Chrome 下次更新时,我的上下文菜单将不会出现。如果我只做onInstalled
,那么在用户重新启动 Chrome 后我的上下文菜单将不会保留。
我该如何处理这两种情况?
这实际上是一个有趣的问题,因为行为会根据您是否使用活动页面 or a 持久背景页.
请注意,此答案特定于contextMenu
API!
持久化后台页面
您应该简单地将代码放在顶层。
然后每次加载扩展程序的后台页面时都会执行它。
如果您有一个持久的后台页面,这正是您想要的:扩展程序启动时执行一次无论出于何种原因.
如果您想确保不创建重复的项目,请包含id
属性在create()
.
谷歌有一个对应样本.
活动页面
在扩展的整个生命周期中,事件页面的加载频率比常规页面要高得多。无论如何,上下文菜单 API 需要特别待遇与活动页面。
首先,包括一个id
属性在contextMenus.create()
is a 要求对于活动页面。另外,由于代码在空闲时被卸载,因此您必须使用chrome.contextMenus.onClicked
而不是onclick
属性。
文档建议使用onInstalled
:
如果您需要在安装或升级扩展时进行一些初始化,请听runtime.onInstalled
事件。这是一个注册的好地方declarativeWebRequest
rules, contextMenu
entries,以及其他此类一次性初始化。
事实上,这就是他们所做的例子.
我测试了它,确实上下文菜单在扩展程序和浏览器重新启动后仍然存在。不过,这种差异没有明确记录。
错误警报!鉴于 Rob W 的评论this bug,如果扩展碰巧被禁用,该方法不是 100% 可靠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)