google-chrome-extension - Chrome webRequest API:onBeforeSendHeaders 事件不会更改标头
问题描述
我创建了一个扩展,如果未启用终止开关,则发送不同的 User-Agent 标头。Kill switch 是一个按钮,一旦单击,就会将 chrome.storage.sync 中的“ks”值从 0 更改为 1,从 1 更改为 0。在 background.js 中,在 onBeforeSendHeaders 侦听器中,我检查了 chrome 存储中的“ks” ' 或终止开关值。如果它是 1,那么扩展应该将用户代理更改为默认值。如果它为 0,则用户代理将更改为自定义代理。问题是 - 如果没有该检查,代码可以正常工作,但您无法阻止侦听器更改用户代理。添加检查时,它只发送默认值,即使 'ks' 为 0。
清单.json
{
"manifest_version": 2,
"name": "UserAgent changer",
"description": "changes user agent",
"version": "1.0.1",
"permissions": ["tabs","webRequest","webRequestBlocking", "*://*/*", "storage"],
"background":{
"scripts":["background.js"],
"persistent": true
},
"browser_action": {
"default_popup": "popup.html"
}
}
背景.js
chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
var headers = details.requestHeaders,
blockingResponse = {};
for( var i = 0, l = headers.length; i < l; ++i ) {
if( headers[i].name == 'User-Agent' ) {
chrome.storage.sync.get('ks', function(result){
if (result.ks == 0){
headers[i].value = 'Custom agent';
}else{
headers.value = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36";
}
});
break;
}
}
blockingResponse.requestHeaders = headers;
return blockingResponse;
},
{urls: [ "<all_urls>" ]},['requestHeaders','blocking']);
chrome.runtime.onInstalled.addListener(function() {
// Set kill switch to True by default
chrome.storage.sync.set({ks: 1});
});
popup.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Popup</title>
<style>
button{
width: 100px;
}
</style>
</head>
<body>
<button id="toggleAgent">Turn on agent</button>
<script src="popup.js"></script>
</body>
</html>
popup.js
console.log("loaded");
btn = document.getElementById("toggleAgent");
chrome.storage.sync.get('ks', function(result){
if (result.ks == 1){
btn.innerText = "Turn on agent";
}else{
btn.innerText = "Turn off agent";
}
});
btn.onclick = function(){
chrome.storage.sync.get('ks', function(result){
console.log(result);
if (result.ks == 1){
btn.innerText = "Turn off agent";
chrome.storage.sync.set({ks: 0});
}else{
btn.innerText = "Turn on agent";
chrome.storage.sync.set({ks: 1});
}
});
};