gpt4 book ai didi

javascript - 如何在 onStartup 和 onInstalled 中添加 Chrome 扩展监听器?

转载 作者:数据小太阳 更新时间:2023-10-29 04:12:36 26 4
gpt4 key购买 nike

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 后我的上下文菜单将不会保留。

我该如何处理这两种情况?

最佳答案

这实际上是一个有趣的问题,因为行为会根据您是否使用 event page 而有所不同。或 persistent background page .

请注意,此答案特定于 contextMenu API!

持久化后台页面

您应该简单地将您的代码放在顶层。

然后它会在每次加载您的扩展程序的后台页面时执行。

如果您有一个持久的后台页面,那正是您想要的:当扩展启动时执行一次无论出于何种原因

如果您想确保不创建重复项,请在 create() 中包含一个 id 属性。

Google 有一个 corresponding sample .

事件页面

在扩展程序的整个生命周期中,事件页面的加载频率远高于常规页面。无论如何,上下文菜单 API 需要对事件页面进行特殊处理

首先,在 contextMenus.create() 中包含一个 id 属性是事件页面的要求。此外,由于空闲时会卸载代码,因此您必须使用 chrome.contextMenus.onClicked 而不是 onclick 属性。

文档推荐使用onInstalled:

If you need to do some initialization when your extension is installed or upgraded, listen to the runtime.onInstalled event. This is a good place to register for declarativeWebRequest rules, contextMenu entries, and other such one-time initialization.

的确,这就是他们在 the sample 中所做的.

我对其进行了测试,确实上下文菜单在扩展程序和浏览器重启后仍然存在。不过,没有明确记录这种差异。

错误警报!鉴于 Rob W 对 this bug 的评论, 如果扩展恰好被禁用,该方法不是 100% 可靠的。

关于javascript - 如何在 onStartup 和 onInstalled 中添加 Chrome 扩展监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30014062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com