google-chrome-extension - 在 ManifestV3 Service Worker 后台脚本中使用 `window` 全局变量

标签 google-chrome-extension firefox-addon firefox-addon-webextensions web-extension

我正在开发一个 Manifest v3 浏览器扩展,我需要从后台脚本识别当前正在运行该扩展的浏览器。由于 ManifestV3 扩展使用服务工作线程,因此它没有 DOM 或窗口。所以我无法使用 window.navigator.userAgent

我找到了related question其中讲了如何获取窗口高度和宽度信息,但我找不到任何其他信息来获取浏览器的userAgent。

这可能吗?

最佳答案

中性全局变量

navigator这样的东西并不特定于窗口的视觉表示。
只需省略window.并直接读取:

  • 导航器
  • navigator.userAgent
  • atob
  • 获取

特定于窗口的全局变量

特定于用户交互或视觉/听觉表示(例如 DOM 或 AudioContext)的内容,或者可能显示用户权限提示的内容。

不适用于工作人员。

窗口的别名

为了代码清晰或者局部变量被命名为全局属性,请使用它们而不是窗口

  • 内置 globalThis(Chrome/ium 71+、FF 65+)和 self

    这些是全局范围内与工作程序兼容的别名。请注意,您正在加载的 JS 库理论上可能会重新定义它们,但这确实很奇怪和不正常。

  • 自制全局

    最可靠的方法,但您必须仅在 IIFE 内部而不是全局添加 'use strict'
    webpack 等捆绑程序已经提供了此功能。
    以下是您可以自行复制的方法:

    const global = (function(){
      if (!this) throw "Don't add 'use strict' globally, use it inside IIFE/functions";
      return this;
    })();
    

关于google-chrome-extension - 在 ManifestV3 Service Worker 后台脚本中使用 `window` 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73778202/

相关文章:

javascript - 我如何在 Vimperator 中获取 ElementByID?

javascript - 在 Firefox 扩展中提交表单数据

javascript - 用纯色或图像覆盖 div Chrome 扩展

javascript - Crossrider外部js文件未加载:PDFJS is not defined

javascript - 如何获取 popup.js 中的链接以在新选项卡中打开?

firefox - 检测页面何时加载了 firefox 扩展

javascript - 如何在 chrome 扩展弹出窗口上创建 "tail"

javascript - Firefox 扩展优先级

javascript - 如何检测 JavaScript 中官方 YouTube 页面的 View /内容何时发生变化?

javascript - 火狐/Chrome扩展程序: how to open link when new tab is created?