GoogleChrome / GoogleChrome/chrome-extensions-samples

Chrome. webRequest. onBeforeSendHeaders. addListener cannot modify request headers

Open
#980 2 comments 1 reaction 0 assignees View on GitHub
Dominant language
JavaScript
Stars
17.8k
Forks
9k
Avg merge
21h
Merged PRs (30d)
28

Description

```json
{
"manifest_version": 3,
"name": "webpack dev chrome extension MV3",
"version": "1.0.1",
"description": "a chrome extension with webpack@3.6",
"background": {
"service_worker": "background/index.js",
"type": "module"
},
"permissions": [ "tabs"
, "storage"
, "cookies"
, "alarms"
, "scripting"
, "webRequest"
, "declarativeNetRequest"
, "declarativeNetRequestWithHostAccess"
, "declarativeNetRequestFeedback"
],
"declarative_net_request": {
"rule_resources": []
},
"web_accessible_resources": [],
"homepage_url": "https://www.slong.ink",
"update_url": "https://clients2.google.com/service/update2/crx"
}
```

```js
// 获取全局变量
const slongThis = (typeof window !== 'undefined'
? window
: (typeof process === 'object' &&
typeof require === 'function' &&
typeof global === 'object')
? global
: this)

const config = {
manifest: {},
crxId: null,
crxUrl: null,

prefix: '__ZSL__',
globalThis: slongThis
}

try {
if (typeof chrome.runtime.getManifest === 'function') {
config.manifest = chrome.runtime.getManifest()
const extensionUrl = chrome.runtime.getURL('') // 获取插件的根路径
const extensionId = new URL(extensionUrl).host;
config.crxId = extensionId;
config.crxUrl = extensionUrl;
}
} catch(e) {

}
// slongThis.config = config

const extraInfo = ["requestHeaders"];
if (chrome.webRequest.OnBeforeSendHeadersOptions.EXTRA_HEADERS) {
extraInfo.push(chrome.webRequest.OnBeforeSendHeadersOptions.EXTRA_HEADERS)
}

// 设置请求头修改
chrome.webRequest.onBeforeSendHeaders.addListener(function(details) {
console.log(details)
// if (details.tabId != -1 || !details.initiator.includes(config.crxId)) {
// return {requestHeaders: details.requestHeaders};
// }
let requestHeaders = function(rh) {
let headers = {}, customHeaders = {};
for (let item of rh) {
if(item.name.indexOf(config.prefix) === 0) {
item.name = item.name.substr(7);
customHeaders[item.name] = item;
customHeaders['aaa'] = item;
} else {
headers[item.name] = item;
}
}
for (let [key, item] of Object.entries(customHeaders)) {
headers[key] = customHeaders[item.name]
}
return Object.values(headers);
}(details.requestHeaders);

return {requestHeaders}
}, {
tabId: -1,
urls: ['*://*/*'],
types: ['xmlhttprequest']
}, extraInfo)

fetch("https://www.bing.com", {
"headers": {
"__ZSL__Origin": "https://www.google.com",
"accept": "*/*",
"accept-language": "zh-CN,zh;q=0.9",
"content-type": "application/x-www-form-urlencoded",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "none"
},
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "POST",
"mode": "cors",
"credentials": "include"
});
```
![image](https://github.com/GoogleChrome/chrome-extensions-samples/assets/40928015/634fdac4-67b0-42da-b5a9-5cf9b822759a)
![image](https://github.com/GoogleChrome/chrome-extensions-samples/assets/40928015/85a0c8a8-b9b9-416b-915a-d94a3fc2791d)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.