如何正确处理来自内容脚本的 Chrome 扩展更新

2024-01-03

在后台页面中,我们可以使用以下命令检测扩展更新chrome.runtime.onInstalled.addListener.

但是扩展程序更新后,所有内容脚本都无法连接到后台页面。我们得到一个错误:Error connecting to extension ....

可以使用以下命令重新注入内容脚本chrome.tabs.executeScript...但是,如果我们有一个敏感数据应该在更新前保存并在更新后使用怎么办?我们能做什么?

此外,如果我们重新注入所有内容脚本,我们应该正确拆除以前的内容脚本。

是什么proper如何在不丢失用户数据的情况下处理内容脚本的扩展更新?


如果您已通过以下方式建立了联系var port = chrome.runtime.connect(...)(如描述https://developer.chrome.com/extensions/messaging#connect https://developer.chrome.com/extensions/messaging#connect),应该可以听到runtime.Port.onDisconnect event https://developer.chrome.com/extensions/runtime#property-Port-onDisconnect:

tport.onDisconnect.addListener(function(msg) {...})

在那里你可以做出反应,例如应用某种记忆,让我们说通过localStorage。但总的来说,我建议保持内容脚本尽可能小,并在后台执行所有数据操作,让内容仅收集/传递数据并在需要时呈现一些状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确处理来自内容脚本的 Chrome 扩展更新 的相关文章

随机推荐

  • 从 main “返回”的正确方法

    假设我们有这样的程序 int main int argc char argv if argc lt 3 printf usage details n return EXIT FAILURE dostuff return EXIT SUCCE
  • 如何仅从 DateTime 获取小时和分钟

    我可以说 2015 01 16 13 50 00 000 在我的数据库中 如何仅获取小时和分钟 13 50 最后我想像这样进行查询 更新 A 设置状态 1 WHERE endTime current time endTime 我上面示例的字
  • angular2 - 在组件之间传递数据对象

    如果可能的话 寻求一些帮助 我有一个位于一个组件中的数据对象 该数据对象是从 REST 调用接收到的 它包含我想跨组件共享的用户详细信息 但我遇到了麻烦 将此对象传递给另一个组件以便我可以使用详细信息的最佳方法是什么 前任 数据对象名为 u
  • 从序列化数据创建数字人物指纹模板

    这是一个非常具体的问题 可能会让我获得风滚草徽章 但如果可以的话请回答 我已经将 DigitalPersona sdk dll 作为类型库导入到 Delphi 中 并尝试验证我作为序列化数据存储在数据库中的指纹 它工作得非常好 注册似乎工作
  • Python数据帧检查列数据帧中的值是否在另一个数据帧中报告的值的范围内

    如果问题微不足道 我深表歉意 但作为一个Python新手 我无法找到正确的解决方案 我有两个数据帧 我需要向第一个数据帧添加一列 如果第一个数据帧的某个值位于第二个数据帧的两个值之间 则该列为 true 否则为 false 例如 first
  • function.fopen:无法打开流:PHP 中的权限被拒绝

    我正在尝试从 PHP 应用程序为我的网站创建 XML 站点地图 这个想法是创建一个新文件或覆盖现有文件 当我调用 fopen 时 出现以下错误 function fopen failed to open stream Permission
  • 如何在会话中使用get方法?

    这是我的代码 实际上 我在页面上显示来自 mysql 的一些数据并创建动态链接 我想在启动任何代码之前在代码的最开头使用 session start 启动一个会话 我想存储要在其他页面上显示的链接的值 page1 php a style c
  • 如何在安装过程中注册 Windows 服务?

    我在VB net 2008中构建了一个Windows服务应用程序 并使用安装向导添加了安装过程 安装程序可以工作 因为它添加了应用程序来添加 删除程序并复制所有文件等 但它缺少实际安装服务的最后 必需 步骤 我已将项目的主要输出添加为安装和
  • Sitemesh 有哪些替代方案可以帮助在 Spring MVC 应用程序中布局 JSP/JSTL 页面页脚/页眉?

    我尝试从我的 Sitemesh 装饰器中排除某些页面 但它似乎不遵循自己的逻辑
  • Mac 上应用程序数据和临时文件的存放位置

    我们有一个 Windows Java 桌面应用程序 可以创建一些配置文件 at APPDATA 并创造logs at TEMP 地点 现在我们计划发布 Mac OS X 的桌面应用程序 我们面临以下困难 我们不想将应用程序数据保留在 app
  • java中有序列表中的二分搜索[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种在java中实现代码的方法 其工作方式与有序ArrayList中的二分搜索相同 但对于有序列表 谢谢 您可以使用 Colle
  • 扩展 jqgrid 子网格

    我有一个带有子网格的 jqgrid 如何在无需单击加号的情况下展开子网格 我碰到 jqgrid id expandSubGridRow rowId 但我不确定使用哪个 rowId 来扩展子网格 Thanks Use jqgrid id ex
  • 与 POST 请求相比,使用 GET 请求有哪些优点?

    我的几个 ajax 应用程序过去使用过 GET 请求 但现在我开始使用 POST 请求 POST 请求似乎稍微更安全 而且绝对对 url 更友好 更漂亮 因此 我想知道是否有任何理由我应该使用 GET 请求 我一般是这样设置问题的 请求后有
  • 在用户的 gradle.properties 中设置 JDK 主目录(javac 路径)

    我需要指定路径javac在我的 Gradle 项目中 我可以通过将以下内容添加到我的build gradle file options forkOptions executable home mj lib jdk1 7 0 80 bin j
  • 如何在 ubuntu 12.0.4 上将 usr/local/bin 添加到路径环境变量?

    我刚刚在 Ubuntu 12 0 4 上安装了 ruby 1 8 6 我正在从一本书中学习 ruby 安装过程结束后它说 完成后 您应该将 usr local bin 添加到 PATH 环境变量中 我假设 作为一名 Linux 用户 我被困
  • 如何使用 ARRAYFORMULA 与上一行的偏移量而不会出现循环引用错误

    示例表 https docs google com spreadsheets d 14ma y3esh1S EkzHpFBvLb0GzDZZiDsSVXFktH3Rr E edit usp sharing https docs google
  • 如何更改 PR 合并提交消息?

    创建拉取请求时 其提交消息始终类似于 将 PR 从 branch name 合并到 targetbranch name 我不断修改提交消息 这有点累 我依靠提交消息来跟踪 因此自动消息会出现问题 这是Azure DevOps的一个功能 目的
  • 如何构建基于数据库的Spring Boot环境/属性源?

    目标是使用包含由数据库连接 数据源 加载和生成的键和值的环境来运行 Spring Boot 应用程序 或者 更抽象的定义 虽然应该首选仅通过文件进行配置 更快 更容易 更宽容 但有时您会发现需要基于非静态文件的配置的用例 Spring 3
  • 菜单作为棱镜区域+主题问题

    我使用菜单控件作为区域 它工作正常 但是当我向应用程序添加主题 向我的 App xaml 添加资源字典 时 正常菜单具有该主题 但我区域内的视图 菜单项 没有该主题 其背后的原因可能是什么 有人有解决方法的想法吗 Alex 问题在于 当在
  • 如何正确处理来自内容脚本的 Chrome 扩展更新

    在后台页面中 我们可以使用以下命令检测扩展更新chrome runtime onInstalled addListener 但是扩展程序更新后 所有内容脚本都无法连接到后台页面 我们得到一个错误 Error connecting to ex