【问题标题】:importScripts fails for Safari web extensionSafari Web 扩展的 importScripts 失败
【发布时间】:2022-12-30 01:03:37
【问题描述】:

我正在将一个有效的 v3 chrome 扩展移植到 MacOS 上的 Safari。在我调用的后台(服务工作者)脚本中

self.importScripts("Platform.js");

应该加载所述 JavaScript 文件。它与调用它的脚本位于同一文件夹中。

但这在 Safari(不是 chrome)中失败并出现错误:

加载资源失败:不支持的 URL safari-web-extension://FE580C4D-9931-4639-ABF9-...../Platform.js

(点代替最后的十六进制数字)。在清单中我有几行:

"web_accessible_resources": [
    {
      "resources": ["Platform.js"],
      "matches": ["<all_urls>"]
    },...

我正在按照 converting a web extension to Safari 的说明进行操作。我正在运行 MacOS Monterey、Safari 15.5。

任何关于我可能需要尝试的指示都将不胜感激。我想过静态导入代码,但它不是 JavaScript 模块。

【问题讨论】:

  • 也遇到了这个。你找到解决办法了吗?
  • 不幸的是没有。我尝试了几种将导入的 JavaScript 代码转换为模块以便静态导入的方法,但没有成功。如果有人知道在扩展的上下文中执行此操作的方法,我想听听。我接下来要尝试的选项是相同的扩展,但使用清单 v2 而不是 v3(避免动态导入)。
  • 嗯,使用 mv2 工作正常并且足以满足我的目的,但对于想要在 Chrome 和 Safari 上发布的扩展程序的作者来说显然有点不满意。谢谢你的提示!

标签: javascript safari safari-extension


【解决方案1】:

与 manifest v3 和 safari 16.1 有相同或相似的问题。首先,确保所有代码(.js、.html、.css)都包含在“构建阶段”上用于代码签名的构建中::

Build Phases

接下来,我尝试使用模块支持。在 manifest.json 中,我删除了:

"background": {
        "service_worker": "background.js",
        "type" : "module"
    },

并将其替换为:

"background": {
    "page" : "background.html"
},

然后 background.html 很简单:

<script type="module" src="background.js"></script>

然后 background.js 在第一行使用导入:

import * as common from "./common.js";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2012-05-20
    • 1970-01-01
    • 2020-07-24
    • 2011-05-25
    相关资源
    最近更新 更多