javascript - 接收关于 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
解决方案
编辑:
正如@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 请求它。
推荐阅读
- python - 如何在不使用列表、元组甚至字典的情况下对 5 个数字进行排序?Python
- python - Keras predict 和 Opencv DNN 模块之间的不同结果
- java - 如何在春季批处理中的单个项目阅读器中读取逗号分隔和管道分隔的csv文件
- java - 我想使用 java 流在对象内部按列表创建列表或映射
- java - 卡夫卡:如果我可以简单地“不承认.acknowledge”,那么使用“acknowledgment.nack”有什么意义?
- php-telegram-bot - 如何使用 php 从 Telegram 中的@username 获取用户 ID
- angular - Angular9 单元测试:是否可以模拟 Parse.initialize 并且仍然有可靠的测试?
- javascript - 如何在反应原生中单击平面列表中的项目来打开屏幕?
- c++ - 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- mysql - 如何在 Windows 中安装 MySQL 8.0.20?