请注意,我尝试了SO上列出的多种解决方案,但仍然失败。因此,发布问题作为不得已的方法。
我正在构建一个可在几个域上运行的chrome扩展程序。用户首先必须登录我的网站,这将在用户的浏览器上放置cookie。然后,该扩展程序将与我的服务器(通过跨站点域)以及用户cookie进行通信,以帮助我识别用户。
我曾尝试添加withCredentials: true
,但是很遗憾。这是我的代码:-
var xhr = new XMLHttpRequest(async=true);
xhr.open('POST', CROSS_DOMAIN_URL, true);
xhr.withCredentials = true;
xhr.setRequestHeader('Content-type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 201) {
// do something
}
}
xhr.send(JSON.stringify({
'data': 'abcd'
}));
还尝试将dataType
设置为jsonp
,但是请求被阻止。
我确实有一个需要cookies
和webRequest
权限的解决方案。我将拦截该请求,并将手动向其添加cookie。 但是,我不想使用额外的权限。
如何通过跨域请求发送cookie?
PS:我使用Django作为网络服务器和CORS库,该库在标头中添加了以下内容
响应标题
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: chrome-extension://jahbloglfdbckehlhangdfielgmppcab
请求标头
Accept: */*
随附的是请求标头的屏幕截图。
也尝试过获取,但结果相同。
fetch(CROSS_DOMAIN_URL, {
credentials: 'include',
mode: 'cors',
async: false,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
'data': 'abcd'
})
})
.then(function(data) {
})
.catch(function(error) {
})