无法从Chrome扩展程序连接到localhost

时间:2011-10-05 22:29:23

标签: google-app-engine google-chrome-extension localhost

我正在制作跟踪时间的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获取结果?

5 个答案:

答案 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
});

编辑:
显然有人不喜欢这个,所以要记住一些事情:

  1. 对于必须使用https的扩展程序,请确保您的服务器正在提供https服务。
  2. 与上面的帖子相反,Chrome扩展程序可以在端口80/443
  3. 以外的端口上提供服务

答案 4 :(得分:0)

如果你想要一个通用的本地主机方法

*://localhost:*/*