Firefox 扩展请求被解释为 CORS

Dan*_*ats 8 javascript same-origin-policy google-chrome-extension firefox-addon-webextensions

将我的 Chrome 扩展程序移植到 Firefox 网络扩展程序时,我无法发出任何网络请求,因为它们被同源策略阻止。

举个例子:

const headers = {"content-type": "application/json" };
window.fetch(myDomain + "/api/v3/token", { method: "GET", headers: headers });
Run Code Online (Sandbox Code Playgroud)

这失败并出现以下错误:

在此处输入图片说明

有没有办法将 Firefox 扩展配置为不考虑这些请求 CORS?相同的代码作为 Google Chrome 扩展程序工作得很好。

即使请求转到本地主机,这也是正确的。

我已经尝试使用 jquery 的$.ajax方法和 axios 库来获得相同的结果(在 Chrome 中有效,在 Firefox 中无效),所以我认为问题不限于window.fetchAPI。

编辑:我知道我可以在服务器端添加 CORS 处理程序,但我试图不这样做。为什么这在 Chrome 中有效,而在 Firefox 中无效?

编辑 2:扩展是一个弹出窗口

小智 7

这在此处记录:https : //developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions#Host_permissions

简而言之,默认情况下,您需要为 localhost 添加一个主机权限以进行同源请求。我不知道为什么谷歌浏览器会以不同的方式处理这个问题。


Max*_*AST 6

对于 2022 年遇到此问题的任何人:

Chrome 正在弃用清单 V2,转而使用 v3。所以你可能最终会使用

host_permissions: ["*://domain/*"]
Run Code Online (Sandbox Code Playgroud)

Firefox 尚不支持清单 v3(截至 2022 年 4 月),您需要使用:

permissions: ["*://domain/*"]
Run Code Online (Sandbox Code Playgroud)

然而

如果像我一样,您在使用 chrome(即 )时(成功)指定了端口http://localhost:4000/*,则它将不适用于 Firefox。您需要使用http://localhost/*它,它适用于 chrome 和 firefox。

  • 为了澄清你的答案:需要使用*匹配模式*`http://localhost/*`(没有端口)并有权访问任何端口,根据 https://developer.mozilla.org/ 的文档en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns#sect2 现在,您的答案读起来不明确(就好像您仅限于 Firefox 中的标准端口一样) (4认同)