繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM