我想将请求重定向到data-url。
// background.js
chrome.webRequest.onBeforeRequest.addListener(
function (details) {
const url = details.url
if(url == 'http://www.example.com') {
return {
redirectUrl: 'data:application/json; charset=utf-8,' + JSON.stringify({"a":1, "b": 2})
}
}
return {cancel: false}
},
{urls: ["<all_urls>"]},
["blocking"]
)
现在,我在页面中启动ajax:
var xhr = new XMLHttpRequest()
// xhr.withCredentials = true
xhr.open('GET', 'http://www.example.com', true)
xhr.send()
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var status = xhr.status;
if (status == 200) {
console.log(xhr.responseText)
}
}
}
它显示了{"a":1, "b": 2}
。
但是,如果我添加withCredentials,那就是错误:
图片内容:
Fetch API无法加载数据:application / json;字符集= UTF-8,{&#34;&#34;:1,&#34; B&#34;:2}。 &#39; Access-Control-Allow-Credentials&#39;回复中的标题是&#39;&#39;哪一定是真的&#39;当请求的凭据模式为&#39; include&#39;时。起源&#39; null&#39;因此不允许访问。 (index):1 Uncaught(在promise中)TypeError:无法获取
如何解决?
我尝试在onHeadersReceived
中添加Access-Control-Allow-Credentials标头,但它没有效果。
chrome.webRequest.onHeadersReceived.addListener(
function (details) {
if(details.url == 'http://www.example.com') {
details.responseHeaders.forEach(header => {
if(header.name == 'Access-Control-Allow-Origin') {
header.value = 'null'
}
})
details.responseHeaders.push({
name: 'Access-Control-Allow-Credentials',
value: 'true'
})
}
return {responseHeaders:details.responseHeaders};
},
{urls: ["<all_urls>"]},
["responseHeaders","blocking"]
)