首页 > 解决方案 > 暂停扩展后如何简单地在内容脚本上运行侦听器

问题描述

所以,我做了一个小的 Firefox 扩展,有一个内容脚本,没有后台脚本,如果扩展被禁用或卸载,我一直试图让脚本做一些清理。使用后台脚本可以通过添加侦听器函数来完成browser.runtime.onSuspend.addListener(<name of function>);,但是内容脚本无法访问 API 的该部分(据我所知),因此让每个单独运行的内容脚本都进行自己的清理不能这样做。什么是解决此问题的好方法。

这是我正在尝试做的一个最小示例,假设我有一个扩展程序,旨在使 youtube 评论在页面运行时不可见,并在扩展程序被禁用或卸载时将其恢复。这是我(显然没有工作)实现这一目标的尝试。

manifest.json

{
  "name": "Minimal Example",
  "version": "0.9",
  "description": "unimportant",
   "content_scripts": [
    {
      "matches": ["https://www.youtube.com/*"],
      "js": ["styles.js"]
    }
  ],
  "manifest_version": 2
}

styles.js

document.getElementsByTagName("ytd-comments")[0].style.visibility = "hidden";

function handleSuspend() {
    console.log("Suspending extension...");
    document.getElementsByTagName("ytd-comments")[0].style.visibility = "visible";
}
browser.runtime.onSuspend.addListener(handleSuspend);

这确实会使评论部分消失,但不会在禁用或卸载扩展程序后重新出现。因为脚本似乎无法使用这个特定的监听器。

怎样才能达到预期的结果,我是否必须设置一个后台脚本来监听这个事件,然后以某种方式向内容脚本发送消息以执行它应该做的事情(我对 WebExtensions API 作为一个整体不太熟悉老实说)?还有比这更简单的方法吗?

标签: javascriptjsonbrowserfirefox-addonfirefox-addon-webextensions

解决方案


推荐阅读