无法从 Chrome 扩展程序连接到本地主机

问题描述 投票:0回答:4

我正在开发一个跟踪时间的 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,为什么它阻止我从本地主机获取结果?

google-app-engine google-chrome-extension localhost
4个回答
46
投票

我相信这是因为您无法调用未包含在清单的权限部分中的服务器。

manifest.json
的权限部分应如下所示:

"permissions": [
  "http://myapp.appspot.com/*",
  "http://localhost/*"
]

注意,我还没有测试过这个,但听起来这就是你的问题所在。


8
投票

可以使用自定义端口。

manifest.json

"permissions": ["http://localhost/*"]

background.js(使用 jQuery)

$.post('http://localhost:5000/some-endpoint');

2
投票

我能够让这段代码工作:

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 以外的端口上服务

2
投票

如果您想要通用的本地主机方法

*://localhost:*/*
© www.soinside.com 2019 - 2024. All rights reserved.