首页 > 解决方案 > 接收关于 Chrome 扩展后台脚本的 CORS 策略

问题描述

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

标签: javascriptgoogle-chromerequestcors

解决方案


编辑:

正如@avalanche1 在评论中指出的那样,在扩展安全源中运行的扩展脚本不受与网页和扩展内容脚本相同的 CORS 限制。根据Chrome 关于该主题的文档

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

{
  "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 请求它。


推荐阅读