【发布时间】:2012-02-26 23:28:30
【问题描述】:
我有一个 chrome 扩展程序,它以一种特殊的方式监控浏览器,将一些数据发送到网络服务器。在当前配置中,这是本地主机。所以内容脚本包含这样的代码:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(data)...
xhr.open('GET', url, true);
xhr.send();
其中 url 参数是 'http://localhost/ctrl?params'(或 http://127.0.0.1/ctrl?params - 没关系)。
清单文件包含跨站点请求的所有必要权限。
该扩展程序在大多数网站上都可以正常工作,但在一个网站上我收到错误:
XMLHttpRequest cannot load http://localhost/ctrl?params. Origin http://www.thissite.com is not allowed by Access-Control-Allow-Origin.
我尝试了这里提出的几种权限(*://*/*、http://*/* 和 <all_urls>),但没有人帮助解决问题。
所以,问题是这个特定网站可能有什么问题(显然可能有其他网站有类似的不当行为,我想知道这种情况的性质),以及如何解决错误?
【问题讨论】:
-
您能否更具体地说明您在哪个网站上看到此错误?它可能正在使用内容安全策略 (dvcs.w3.org/hg/content-security-policy/raw-file/tip/…) 来阻止加载数据。
-
这里是网站 - www.wix.com。
-
米海,你的意思是网站的“内容安全策略”优先于扩展权限吗?那么我们如何才能编写一个可靠的扩展呢?有解决办法吗?
-
在来自该站点的特定 HTTP 标头中,我只看到以下标头:
X-Content-Type-Options: nosniff和X-XSS-Protection: 1; mode=block。他们中的任何一个是否违反了扩展程序的权限?我在网上没有找到相关信息。 -
这些标题不应该影响您的扩展程序的行为(我也没有在 www.wix.com 响应中看到它们,它们是针对网站的特定子页面的)。是否可以共享您的扩展程序(和/或创建一个仅复制此问题的最小版本)?
标签: google-chrome google-chrome-extension same-origin-policy