我正在编写一个从服务器请求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“。我还应该做些什么?
答案 0 :(得分:0)
这应该有效(SOP不适用于chrome扩展),因此有三种可能性:
某处出现了一些错误
只是为了确保使用添加<all urls>
权限并检查该扩展程序是否真的拥有此权限。 (例如,在检查后台页面时在控制台中执行chrome.runtime.getManifest()
)
服务器本身正在检查Origin
标头,如果原始值意外,则拒绝请求
你可以通过使用一些http测试仪和手动发送请求来快速检查这一点(例如Dev Http Client用于chrome,因为我是其中一个开发人员)。如果它显示相同的错误,则表示服务器确实正在检查原始标题。
要解决此问题,您必须让服务器以某种方式接受您的来源,或者您可以使用chrome.webRequest为发送到目标服务器的所有请求设置有效的原始标头(标准XHR api不允许修改Origin header)
Chrome错误
在这种情况下,您只能report出现此错误并等待最佳