链接到 Xcode 项目的存储库来测试问题:测试 CORS 问题 https://github.com/nick-kadutskyi/safari-ext-cors-issue
这个扩展使用 Manifest v3,我有example.com
in host_permissions
"host_permissions": [
"*://example.com/*"
]
当我跑步时fetch("https://example.com")
in background.js
我收到此错误:
[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 技术预览版 153(Safari 16.0、WebKit 17615.1.4.1)中进行了测试
在我使用的代码中chrome
命名空间(在 Chrome 浏览器中测试它)但我遇到了同样的问题browser
命名空间。
如果我在 Chrome 浏览器中运行此扩展程序而无需进行任何更改,则它可以完美运行
(chrome://extensions/→加载解压)
有没有办法在不更改服务器访问控制设置的情况下避免 CORS 问题?
Manifest v2 以这种方式工作得很好。
更新1:
目前的解决方法是使用后台脚本(在 v3 中已弃用)而不是后台服务工作线程。
而不是这个:
"background": {
"service_worker": "background.js"
},
Do this:
"background": {
"scripts": ["background.js"]
},
更新 2:如何让您的扩展同时适用于 Chrome 和 Safari?
Chrome 仅支持
"background": {
"service_worker": "background.js"
},
Safari 两者都支持service_worker
and scripts
但是当您使用 service_worker 时,它会出现 CORS 问题。
所以解决方案是在中传递具有不同值的扩展background
field.