我正在开发一个跟踪时间的 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.
但是当我更改 URL 以便将其发布到 appspot.com URL 时,它就可以工作。
什么是 Access-Control-Allow-Origin,为什么它阻止我从本地主机获取结果?
我相信这是因为您无法调用未包含在清单的权限部分中的服务器。
manifest.json
的权限部分应如下所示:
"permissions": [
"http://myapp.appspot.com/*",
"http://localhost/*"
]
注意,我还没有测试过这个,但听起来这就是你的问题所在。
您可以使用自定义端口。
manifest.json
"permissions": ["http://localhost/*"]
background.js(使用 jQuery)
$.post('http://localhost:5000/some-endpoint');
我能够让这段代码工作:
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
});
编辑:
显然有人不喜欢这个,所以要记住一些事情:
如果您想要通用的本地主机方法
*://localhost:*/*