我正在制作跟踪时间的Chrome扩展程序,并使用Google App Engine作为后端。
为了进行测试,我正在尝试将本地版本的扩展程序连接到本地版本的App Engine应用程序。当我尝试发送POST请求时,我得到了:
XMLHttpRequest cannot load http://localhost:8080/report. Origin chrome-extension://mbndmimplohfkkcincjodnfpaapbbmei is not allowed by Access-Control-Allow-Origin.
但是当我更改网址以便它发布到appspot.com网址时,它就有效。
什么是Access-Control-Allow-Origin,为什么阻止我从localhost获取结果?
答案 0 :(得分:24)
我认为这是因为您无法调用清单的权限部分中未包含的服务器。 manifest.json的权限部分应如下所示:
"permissions": [
"http://myapp.appspot.com/*",
"http://localhost/*"
]
注意,我没有对此进行测试,但听起来这就是问题的来源。
答案 1 :(得分:2)
您无法在权限范围内添加端口。您必须在权限清单中使用端口80作为扩展。我通常运行nginx并将所有流量从我的扩展路由到80端口。
答案 2 :(得分:2)
你可以使用自定义端口。
<强>的manifest.json 强>
"permissions": ["http://localhost/*"]
background.js (使用jQuery)
$.post('http://localhost:5000/some-endpoint');
答案 3 :(得分:0)
我能够使用此代码:
var loginPayload = {};
loginPayload.username = document.getElementById('username').value;
loginPayload.password = document.getElementById('password').value;
console.log(loginPayload);
var callback = function (response) {
console.log(response);
};
var handle_error = function (obj, error_text_status){
console.log(error_text_status + " " + obj);
};
$.ajax({
url: 'https://127.0.0.1:8443/hello',
type: 'POST',
success: callback,
data: JSON.stringify(loginPayload),
contentType: 'application/json',
error: handle_error
});
编辑:
显然有人不喜欢这个,所以要记住一些事情:
答案 4 :(得分:0)
如果你想要一个通用的本地主机方法
*://localhost:*/*