You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Safari Web扩展后台Service Worker发起请求遇CORS问题,求无需改服务端的解法

Safari Manifest v3 扩展 CORS 问题及兼容方案

本扩展采用 Manifest v3 规范,已在 host_permissions 中配置目标域名:

"host_permissions": [
    "*://example.com/*"
]

当在 background.js 中执行 fetch("https://example.com") 时,出现以下CORS错误:

[Error] Fetch API cannot load https://example.com/ due to access control checks.
[Error] Failed to load resource: Origin safari-web-extension://e0b5d7c7-c079-484b-8825-44d261383cb6 is not allowed by Access-Control-Allow-Origin. Status code: 200 (example.com, line 0)

测试环境

  • Safari 16.0(版本号17614.1.25.9.10,17614)
  • Safari Technology Preview 153(Safari 16.0,WebKit 17615.1.4.1)

补充说明

  • 代码中使用chrome命名空间测试Chrome浏览器,切换为browser命名空间时问题依旧
  • 该扩展直接在Chrome浏览器中加载(chrome://extensions/ → 加载已解压的扩展程序)可正常运行
  • Manifest v2 下相同逻辑可正常执行

核心问题

是否存在无需修改服务端访问控制设置即可规避CORS问题的方法?


更新1:临时解决方法

使用 Manifest v3 中已弃用的后台脚本配置替代后台 Service Worker:

替换前(Service Worker 配置):

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

替换后(后台脚本配置):

"background": {
    "scripts": ["background.js"]
},

更新2:跨浏览器兼容方案

  • Chrome 仅支持 Service Worker 配置:
"background": {
    "service_worker": "background.js"
},
  • Safari 同时支持service_worker和scripts配置,但使用Service Worker时会触发上述CORS问题

解决方案:针对不同浏览器发布配置不同background字段的扩展包。


内容的提问来源于stack exchange,提问作者Nick Kadutskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:30:57