[英]Using fetch in chrome extension doesn't include referer header in the request
[英]Using fetch in chrome extension sends null origin header
当使用 fetch API 发送跨源请求时, origin
请求 header 被设置为 null 而不是我期望的chrome://xxxxx
。 在 background.js 上下文和注入的 iframe 上下文中使用 fetch 会导致相同的行为。
当我改用 XMLHttpRequest 时,它会发送预期的来源 header。
manifest.json(或其他东西)中是否有一些控制阻止 fetch 按预期运行? 我的理解是origin
header 是“受保护的”,因此尝试手动设置它显然不起作用。
我注意到了同样的问题。 我的解决方法是使用XMLHttpRequest而不是像OP提到的那样获取。 使用XHR,它确实发送源为chrome://**extension-id**
但不是referer头。 没有带有fetch的 referer标头。
如果有人想知道如何使用XMLHttpRequest 。 以下代码片段取自MDN XMLHttpRequest readState文档 :
var xhr = new XMLHttpRequest();
console.log('UNSENT', xhr.readyState); // readyState will be 0
xhr.open('GET', '/api', true);
console.log('OPENED', xhr.readyState); // readyState will be 1
xhr.onprogress = function () {
console.log('LOADING', xhr.readyState); // readyState will be 3
};
xhr.onload = function () {
console.log('DONE', xhr.readyState); // readyState will be 4
};
xhr.send(null);
如果您更喜欢使用promise,则可以使用promise来包装XMLHttpRequest。 您可以查看本文,了解如何将XMLHttpRequest转换为承诺以获取更多信息。
function xhr(params) {
return new Promise(function(resolve, reject) {
let xhr = new XMLHttpRequest();
let url = '';
xhr.open('POST', url + params);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.responseType = '';
xhr.onerror = function() {
reject(new Error('error'));
};
xhr.onload = function() {
// do something with response
let res = xhr.response;
resolve(res);
};
// send request
body = JSON.stringify({ params });
xhr.send(body);
})
}
从扩展后台工作程序(使用清单 V3)执行时,应该有某种方法可以使提取发送 Origin header ...使用特定的referrerPolicy怎么样? ( https://googlechrome.github.io/samples/fetch-api/fetch-referrer-policy.html )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.