Google chrome extension Chrome webRequest API:onBeforeSendHeaders事件不会更改标头
我创建了一个扩展,如果没有启用kill开关,它将发送不同的User-Agent头。Kill开关是一个按钮,一旦单击,它会将chrome.storage.sync中的“ks”值从0更改为1,并从1更改为0。在background.js中,在onBeforeSendHeaders侦听器中,我检查chrome存储中的“ks”或kill开关值。如果是1,那么扩展应该将用户代理更改为默认。如果为0,则用户代理将更改为自定义代理。问题是,如果没有检查,代码可以正常工作,但是您无法阻止侦听器更改用户代理。添加检查时,它只发送默认值,即使“ks”为0 manifest.jsonGoogle chrome extension Chrome webRequest API:onBeforeSendHeaders事件不会更改标头,google-chrome-extension,Google Chrome Extension,我创建了一个扩展,如果没有启用kill开关,它将发送不同的User-Agent头。Kill开关是一个按钮,一旦单击,它会将chrome.storage.sync中的“ks”值从0更改为1,并从1更改为0。在background.js中,在onBeforeSendHeaders侦听器中,我检查chrome存储中的“ks”或kill开关值。如果是1,那么扩展应该将用户代理更改为默认。如果为0,则用户代理将更改为自定义代理。问题是,如果没有检查,代码可以正常工作,但是您无法阻止侦听器更改用户代理。添加
{
"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"
}
}
background.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});
});
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});
}
});
};
chrome.storage
是异步的,因此它在调用代码完成后运行很长时间(onBeforeSendHeaders侦听器)。不能在此侦听器中使用异步API。请切换到window.localStorage
或将该值保留在全局变量中。@wOxxOm将更改为chrome.storage.local也有效?不,所有chrome
API回调都是异步的。谢谢@wOxxOm,您的建议有效chrome.storage
是异步的,因此它在调用代码完成后运行很长时间(onBeforeSendHeaders侦听器)。不能在此侦听器中使用异步API。请切换到window.localStorage
或将该值保留在全局变量中。@wOxxOm将更改为chrome.storage.local也有效?不,所有chrome
API回调都是异步的。谢谢@wOxxOm,您的建议有效!
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});
}
});
};