chrome扩展可以从http://www.foo.com/api获取数据,但不能从http://www.foo.com/api/data.xml获取数据

时间:2013-10-05 05:47:59

标签: google-chrome-extension

我正在编写一个从服务器请求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();

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

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

1 个答案:

答案 0 :(得分:0)

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

某处出现了一些错误

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

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

你可以通过使用一些http测试仪和手动发送请求来快速检查这一点(例如Dev Http Client用于chrome,因为我是其中一个开发人员)。如果它显示相同的错误,则表示服务器确实正在检查原始标题。

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

Chrome错误

在这种情况下,您只能report出现此错误并等待最佳