Roy*_*llo 2 javascript cookies http-headers google-chrome-extension
We wrote a Chrome-extension that, using the onBeforeSendHeaders event, adds a cookie to each web request:
chrome.webRequest.onBeforeSendHeaders.addListener(addCookie, {
urls: ["<all_urls>"]
}, ["blocking", "requestHeaders"]);
function addCookie(details) {
if (details.url.match(/ourWebsite/)) {
details.requestHeaders.forEach(function (requestHeader) {
if (requestHeader.name.toLowerCase() === "cookie") {
//Code that adds a cookie with a value
}
});
return {requestHeaders: details.requestHeaders};
}
}
Run Code Online (Sandbox Code Playgroud)
它适用于每个人的 Chrome,但我自己的。在调试扩展时,我注意到details.requestHeaders数组没有cookie标头(这总是假的:)requestHeader.name.toLowerCase() === "cookie"。
我的第一个想法是另一个扩展程序搞砸了我们的,所以我尝试隐身(不允许其他扩展程序),但它没有用。
在扩展的清单中,我们在permissions.
有任何想法吗?提前致谢!
根据这个https://developer.chrome.com/extensions/webRequest
从 Chrome 72 开始,不提供以下请求标头,如果不在 opt_extraInfoSpec 中指定 'extraHeaders',则无法修改或删除:
- 接受语言
- 接受编码
- 推荐人
- 曲奇饼
从 Chrome 79 开始:
- 起源
- CORS 预检请求
其他侦听器的响应标头,如 onHeadersReceived:
- 从 Chrome 72 开始:
- 设置 Cookie
- 在应用CORB之前要修改的任何标头
- 从 Chrome 79 开始:
- CORS 预检响应
因此,您应该将“extraHeaders”添加到 webRequest 侦听器的第三个参数中,它应该["blocking", "requestHeaders", "extraHeaders"]用于您的示例。
请注意,它不会在不知道 72 之前的旧版 Chrome 中运行extraHeaders,因此您可以使用以下技巧来获得通用兼容的侦听器:
chrome.webRequest.onBeforeSendHeaders.addListener(
addCookie,
{urls: ["<all_urls>"]},
["blocking", "requestHeaders",
chrome.webRequest.OnBeforeSendHeadersOptions.EXTRA_HEADERS].filter(Boolean)
);
Run Code Online (Sandbox Code Playgroud)