Ben*_*rey 8 javascript google-chrome-extension
该chrome.runtime API有,我可以用它来添加一个侦听上下文菜单的几个事件.目前我正在这样使用chrome.runtime.onStartup:
chrome.runtime.onStartup.addListener(function() {
chrome.contextMenus.create({
'title': 'Add: %s',
'contexts': ['selection']
});
});
chrome.contextMenus.onClicked.addListener(onClickHandler);
Run Code Online (Sandbox Code Playgroud)
问题是,chrome.runtime.onStartup当用户启动或重新启动Chrome chrome.runtime.onInstalled时,该功能将起作用,并且在首次安装或更新扩展程序或Chrome时可以使用.
如果我这样做onStartup,那么当我的扩展程序或Chrome下次更新时,我的上下文菜单就不会出现.如果我这样做onInstalled,那么在用户重新启动Chrome后,我的上下文菜单将不会保留.
我该如何处理这两种情况?
这实际上是一个有趣的问题,因为根据您使用的是事件页面还是持久性背景页面,行为会有所不同.
请注意,此答案特定于contextMenuAPI!
您应该简单地将代码放在顶层.
然后,每次加载扩展程序的后台页面时,它都会执行.
如果你有一个持久的背景页面,那就是你想要的:当扩展程序因任何原因启动时执行一次.
如果要确保不创建重复项,请在其中包含id属性create().
谷歌有相应的样本.
在扩展的整个生命周期中,事件页面的加载频率远高于常规页面.无论如何,上下文菜单API需要对事件页面进行特殊处理.
首先,包括id属性contextMenus.create()是对事件页面的要求.此外,因为代码在空闲时卸载,所以必须使用chrome.contextMenus.onClicked而不是onclick属性.
文档建议使用onInstalled:
如果在安装或升级扩展时需要进行一些初始化,请收听该
runtime.onInstalled事件.这是注册declarativeWebRequest规则,contextMenu条目和其他此类一次性初始化的好地方.
实际上,这就是他们在样本中所做的事情.
我测试了它,实际上通过重新启动扩展和浏览器来保持上下文菜单.但是,这种差异没有明确记录.
错误警报!鉴于Rob W对此错误的评论,如果扩展恰好被禁用,则该方法不是100%可靠.
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |