0

我正在编写一个从服务器请求 XML 内容并在弹出/对话框窗口中显示数据的扩展程序。我已将网站添加到我的 manifest.json 权限中,如下所示:

"permissions": [
    "http://*/*"
],

后来我在后台页面中添加了以下代码:

function loadData() {
var url = "http://www.foo.com/api/data.xml";
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
...
xhr.send();

问题是,我收到跨站点安全错误“Access-Control-Allow-Origin 不允许 Origin chrome-extension://kafkefhcbdbpdlajophblggbkjloppll。”

问题是,在权限中使用“http:/// 我可以请求“ http://www.foo.com/api ”,但我找不到任何方法来允许“ http://www.foo ” .com/api/data.xml ”。我已经在“权限”中尝试了“http://// * ”和http://www.foo.com/api/data.xml “。我还应该做什么?

4

1 回答 1

0

这应该有效(SOP 不适用于 chrome 扩展),所以有三种可能性:

某处有错误

只是为了确保使用添加<all urls>权限并检查扩展是否确实具有此权限。(例如chrome.runtime.getManifest()检查后台页面时在控制台中执行)

服务器本身正在检查Origin标头,如果原始值意外,则拒绝请求

您可以通过使用一些 http 测试器并手动发送请求来快速检查这一点(例如Dev Http Client for chrome,因为我是开发人员之一)。如果它显示相同的错误,则表示服务器确实在检查源头。

要解决这个问题,您必须让服务器以某种方式接受您的 origin ,或者您可以使用chrome.webRequest为发送到目标服务器的所有请求设置有效的 origin 标头(标准 XHR api 不允许修改 Origin 标头)

铬错误

那么在这种情况下你只能报告这个错误并等待最好的

于 2013-10-05T17:41:57.443 回答