我正在开发一个Chrome扩展程序,它在各种网站上生成XMLHttpRequest,但我注意到我的浏览器忽略了“withCredentials”字段。无论是设置为true还是false,响应始终相同,并包含通过浏览器中的简单URL导航请求的网页。
清单:
"background": {
"scripts": ["jquery.min.js", "daemon.js"],
"persistent": true
},
"permissions": [
"<all_urls>"
]
内部daemon.js:
var xhr = new XMLHttpRequest();
xhr.open("GET", 'http://stackoverflow.com/', true);
xhr.withCredentials = false;
xhr.onload = function(e) {
$('body').html(xhr.responseText);
}
xhr.send();
尽管将withCredentials设置为false,这将返回stackoverflow.com在某些DOM元素中加载我的用户名。我的问题是:
我正在使用最新的(22.0.1229.79米)Chrome。
答案 0 :(得分:1)
是的,此(正在发送的凭据的操作)是预期的行为。 XMLHttpRequest level 2 specification #withCredentials说(这是该部分的最后一行):
获取同源资源时,withCredentials属性无效。
显然,在Chrome扩展程序的上下文中运行的代码具有足够的权限(清单文件)会导致该属性的行为与请求来自同一源的行为相同。
我已经检查过从后台页面获取请求是否解决了任何问题,并得出结论认为它无济于事。如果其他站点支持CORS(通过标头),则解决方案是不提及清单文件的"permissions"
部分中的站点。
所有其他选项都在this answer中突出显示。
如果没有一种方法令人满意,那么问题二的答案是“不,没有解决办法”。
答案 1 :(得分:0)
您需要在 Chrome 扩展程序中将 API 端点列入白名单。示例:
{
"name": "My extension",
...
"host_permissions": [
"https://stackoverflow.com/"
],
...
}