【发布时间】:2017-07-21 07:38:35
【问题描述】:
我正在尝试编写一个 chrome 扩展,这是我第一次需要使用一个 POST 到服务器。如果我在邮递员中向https://localhost:80/savelink 的本地服务器发出请求,我会得到 200,并且服务器会相应地运行。但是,当我尝试从 chrome 扩展程序触发请求时,服务器行为永远不会被触发。请求如下(仅对示例稍作修改):
chrome.tabs.query(queryInfo, function(tabs) {
var tab = tabs[0];
var url = tab.url;
console.assert(typeof url == 'string', 'tab.url should be a string');
var request = new XMLHttpRequest();
request.open("POST", 'https://localhost:80/savelink', true);
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
request.send({ tab_url: url });
console.log("HIT");
});
我的 manifest.json 权限看起来像这样(你能看出我在扯头发吗?):
"permissions": [
"activeTab",
"https://localhost/*",
"https://*/",
"http://*/"
]
我的服务器的相关部分如下所示:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.post('/savelink', function(req, res) {
console.log(req.body); // this log is never triggered when the route is hit through chrome
res.sendStatus(200);
});
我正在运行设置了 --disable-web-security 标志的 Chrome Canary。我仍然在客户端收到不安全的响应,但我认为这可能无关紧要。
【问题讨论】:
-
我查看了许多类似的问题,但无法找到解决方案:(
-
您是否尝试查看 XMLHttpRequest 的错误信息?
-
在扩展页面的 devtools 网络面板中看到传出请求了吗?以防万一:弹出页面和背景页面都有自己的开发工具,而不是为网页显示的工具。
-
@epascarello 这个错误只是说这是一个不安全的响应,因为我似乎无法让它实际上禁用安全
-
可能是因为自签名证书......我认为标志是
--ignore-certificate-errors
标签: javascript google-chrome-extension xmlhttprequest