如何在 onStartup 和 onInstalled 上添加 Chrome 扩展侦听器?

2023-11-26

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(使用前将#替换为@)

如何在 onStartup 和 onInstalled 上添加 Chrome 扩展侦听器? 的相关文章

随机推荐

  • Python程序删除文本文件中的特定行[重复]

    这个问题在这里已经有答案了 我有一个文本文件 Thai Rectangle2 National Parks txt 其中包含以下几行 1 2 3 4 5 dy 0 5965 7 现在 我想删除该文本文件中的第 6 行 为此 我使用以下 py
  • @OrderColumn、@OneToMany 和集合的空索引列

    我正在尝试创建保留顺序的父子表 Hibernate 文档中的示例 7 8 显示了如何执行此操作 Entity public class Customer Id GeneratedValue public Integer getId retu
  • 为什么 Apache 的 RewriteRule 会泄露本地路径?

    我正在尝试使用 RewriteRules htaccess具有相对路径 但 Apache 似乎想要输出physical路径而不是server每当我尝试输出相对路径时 绝对路径和服务器根路径工作正常 例如 RewriteEngine On t
  • PHP:strlen返回字符长度而不是字节长度[重复]

    这个问题在这里已经有答案了 我有一个 WordPress 网站 我创建了简单的页面模板 例如 然后我使用这个模板创建了一个页面 该页面显示俄语字符串 意思是 你好 的长度 我期望看到 12 因为由 6 个字符组成的 UTF 8 编码的俄语字
  • 使用物理定律模拟轨道[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 在过去的几周里 我一直在尝试模拟太阳系模拟中的轨道 这是我作为大学模块的一部分进行的 简而言之 我的模拟是使用 Ogre3D 渲染引擎用 C 编写的 我尝试使用牛顿万有引力定律来
  • 未捕获的类型错误:无法读取 null 的属性“offsetTop”

    我正在使用 HTML CSS 和 JavaScript 创建一个带有粘性和响应式导航栏的网页 我创建了响应式导航栏 并试图使其具有粘性 问题是它不粘并且显示错误 未捕获的类型错误 无法读取 null 的属性 offsetTop HTML 代
  • Python3 和 pandas

    我检查了一些其他的答案 并在谷歌上进行了广泛的搜索 似乎找不到有人问过 回答过这个问题 我运行的是 Ubuntu 12 04 我安装了python2 7和python3 2 我运行了 sudo apt get install python
  • C 与 C++ 中具有静态存储持续时间的对象的初始化 [重复]

    这个问题在这里已经有答案了 可能的重复 main 返回什么 例如 以下代码编译时不会出现任何警告 include
  • 使用 Xamarin Form 获取设备属性?

    我正在使用 xamarin 表单设计一个跨平台应用程序 每个页面 视图 表单都是从代码隐藏设计的 现在我想读取用户使用的设备的高度和宽度 根据这些值 我想放置一些页眉和页脚 为了获取 Xamarin Forms 解决方案中的屏幕宽度 或高度
  • 预计加入路径!休眠错误

    我尝试进行连接 但不断收到此错误 预计加入路径 选择 t CourseId FROM 任务作为 t INNER JOIN 课程为 c CoursePermissions 为 cp 哪里 t CourseId 1 I have const s
  • 使用 Node.js 开发丰富的应用程序

    我是 Node js 的新手 需要使用 Node js 开发一个基于 Web 的丰富应用程序 现在我正在研究 Node js 的入门指南 我有机会查看该页面here并对数百个框架感到困惑 我不知道如何选择合适的框架 需要这方面的帮助才能做出
  • 从 HSQLDB 中记录 SQL 表达式

    我在我的应用程序中使用 HSQLDB 现在我需要记录执行的每一条sql语句 我不想自己处理 SQL 日志记录 HSQLDB 中是否有执行此操作的标准方法 HSQLDB 2 2 x 支持 SQL 日志记录 假设你的数据库名为test然后使用
  • OpenCV Android 背景减法

    我正在开发一个机器人项目 使用 Android 手机作为主处理器 并使用摄像头来检测运动 我拿到来自 OpenCV 的 Android 二进制包并正确安装 我可以使用 OpenCV 本机相机捕获图像并将其显示到屏幕上 不过 我在使用背景扣除
  • 带有 Rails 3.0 的 Google 地图 API

    我想知道是否有人使用过带有 Rails 3 的 Google Maps API 我正在寻找发布想法 gems 插件等 我玩过ym4r gm 插件今天几个小时 运气不太好 你在 Rails 3 上使用过这个 API 吗 提前致谢 仅供参考 我
  • C# 中的函数指针

    我想在某些方面 或两者 Delegate or MethodInfo有资格获得这个称号 然而 两者都没有提供我正在寻找的语法优美性 简而言之 有什么方法可以写出以下内容 FunctionPointer foo whatever create
  • orElse 如何在偏函数上工作

    我的行为非常奇怪 至少在我看来 orElse方法定义于PartialFunction 在我看来 val a PartialFunction String Unit case hello gt println Bye val b Partia
  • 错误:“brew link”步骤未成功完成

    我正在尝试通过 Homebrew 安装 Node js 不幸的是 我收到此错误 brew install node gt Downloading http nodejs org dist v0 8 10 node v0 8 10 tar g
  • 保存事件后触发 MS Word 宏

    我的 MS Word 2007 模板有一个页脚 其中包含文件名 用户将打开模板并执行 另存为 来制作文档 我希望页脚中显示的文件名立即更新为新文件名 有没有一个AfterSaveEvent或者我可以用作钩子来启动执行更新的 VBA 脚本的东
  • 使用迭代器时可以速记“begin..end”吗?

    怎样才能避免写作smth begin smth end 一直在使用迭代器 例如 如果您必须使用std reverse 它看起来像这样 std reverse mystr begin mystr end 但我想我在某个地方看到人们在做同样的事
  • 如何在 onStartup 和 onInstalled 上添加 Chrome 扩展侦听器?

    The chrome runtime API有一些事件可以用来将侦听器添加到上下文菜单 目前我正在使用chrome runtime onStartup像这样 chrome runtime onStartup addListener func