gpt4 book ai didi

javascript - 在 chrome 扩展中使用 fetch 发送 null origin header

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:37 25 4
gpt4 key购买 nike

当使用 fetch API 发送跨源请求时,origin 请求 header 被设置为 null,而不是我期望的 chrome://xxxxx。在 background.js 上下文和注入(inject)的 iframe 上下文中使用 fetch 会导致相同的行为。

当我改用 XMLHttpRequest 时,它会发送预期的原始 header 。

manifest.json(或其他东西)中是否有一些控制阻止 fetch 按预期运行?我的理解是 origin header 是“ protected ”,因此尝试手动设置它显然行不通。

最佳答案

我注意到了同样的问题。我的解决方法是使用 XMLHttpRequest 而不是像 OP 提到的那样获取。使用 XHR,它确实将原点发送为 chrome://**extension-id** 但不是 referer header 。没有带有 fetch 的引用 header 也是。

如果有人想知道如何使用 XMLHttpRequest .以下代码片段取自 MDN XMLHttpRequest readState document :

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。你可以看看this article on how to turn XMLHttpRequest into promise获取更多信息。

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);
})
}

关于javascript - 在 chrome 扩展中使用 fetch 发送 null origin header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45222298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com