【问题标题】:Receiving CORS Policy on Chrome Extension Background Script [duplicate]接收关于 Chrome 扩展后台脚本的 CORS 策略 [重复]
【发布时间】:2020-06-13 03:40:18
【问题描述】:

每次我在后台脚本中使用 fetch() 调用另一个网站时,都会收到以下错误:Access to XMLHttpRequest at 'http://127.0.0.1:8080/api/allowedDomains' from origin 'chrome-extension://ngaahahncefaccijfgplkmbghbbolonk' has been blocked by CORS policy

【问题讨论】:

标签: javascript google-chrome request cors


【解决方案1】:

编辑:

正如@avalanche1 在 cmets 中指出的那样,在扩展安全源中运行的扩展脚本不受与网页和扩展内容脚本相同的 CORS 限制。根据Chrome's documentation on the subject

通过向清单文件的权限部分添加主机或主机匹配模式(或两者),扩展程序可以请求访问其源之外的远程服务器。

{
  "name": "My extension",
  ...
  "permissions": [
    "https://www.google.com/"
  ],
  ...
}

原始答案:

请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS 了解更多关于为什么会发生这种情况的信息:

出于安全原因,浏览器会限制从脚本发起的跨域 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一来源请求资源,除非来自其他来源的响应包含正确的 CORS 标头。

长话短说,除非该网站允许您,否则您不能向其他网站提出请求。

如果您控制要向其发送请求的网站(因为它是localhost,我认为在这种情况下可能就是这种情况),您可以配置网站以使用正确的标头进行响应(请参阅上面的链接具体)。

如果您不控制网站,那么除非控制方为您提供以编程方式使用它的方法,否则无法从 JS 请求它。

【讨论】:

  • 这是不正确的,因为后台脚本按设计允许向任何 url 发出请求并绕过 CORS。虽然,我更新到 Chrome 81 后似乎不是这种情况。仍然不知道原因......
猜你喜欢
  • 2021-03-14
  • 2014-02-14
  • 2018-04-11
  • 2019-11-05
  • 2015-11-09
  • 1970-01-01
  • 2021-06-28
  • 2023-01-26
  • 1970-01-01
相关资源
最近更新 更多