我正在 Firefox 中开发一个“基本”扩展(插件)来修改请求标头我遵循此处的官方文档(复制/粘贴但不起作用)https://developer.mozilla.org/en-US/ docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeSendHeaders#details_2 将其更改为下面的示例,但仍然无法使其工作。
在我的清单中,我要求获得文档中提到的所有许可: //清单.json
{
...
"permissions": [
"webRequest",
"webRequestBlocking",
"storage",
"tabs"
],
...
}
//背景.js
let currentUserAgent = '';
function updateUserAgent(userAgent) {
currentUserAgent = userAgent;
console.log('User agent updated:', currentUserAgent); // User agent updated: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
console.log("Registering onBeforeSendHeaders event listener..."); //Registering onBeforeSendHeaders event listener...
chrome.webRequest.onBeforeSendHeaders.addListener(
handleRequest,
{ urls: ["<all_urls>"] },
["blocking", "requestHeaders"]
);
console.log(chrome.webRequest.onBeforeSendHeaders.hasListener(handleRequest)); //true
}
function handleRequest(details) {
console.log('Handling request:', details); //NO LOG
// Check if the 'user-agent' header exists
const userAgentHeader = details.requestHeaders.find(header => header.name.toLowerCase() === 'user-agent');
if (userAgentHeader) {
console.log('User-Agent header found:', userAgentHeader.value); //NO LOG
userAgentHeader.value = currentUserAgent;
console.log('User-Agent header updated:', userAgentHeader.value); //NO LOG
} else {
console.log('User-Agent header not found in the request headers.'); // NO LOG
}
return { requestHeaders: details.requestHeaders };
}
// Retrieve the saved user agent on startup
chrome.storage.local.get('userAgent', (data) => {
updateUserAgent(data.userAgent || 'Default User Agent');
});
// Listen for messages to update the user agent
chrome.runtime.onMessage.addListener(message => {
if (message.action === 'updateUserAgent') {
updateUserAgent(message.userAgent);
}
});
关于如何使其发挥作用有什么想法吗?
我尝试过的其他事情: 将对象 chrome 更改为浏览器,结果没有改变。
我怎么知道不起作用?
当我进入网络选项卡时,UA 标头没有更改。我还使用 burpsuite 来捕获请求,实际上标头没有改变。
我知道你问这个问题已经有一段时间了,所以也许你已经知道答案,但你说:
{
...
"permissions": [
"webRequest",
"webRequestBlocking",
"storage",
"tabs"
],
...
}
你应该这样做:
{
...
"permissions": [
"webRequest",
"webRequestBlocking",
"storage",
"tabs",
"*://*/*"
],
...
}
您需要获得拦截 URL 的权限。当您为过滤器指定
urls
属性时,它的作用就是:过滤。如果您没有 URL 的权限,则过滤器中不会出现任何内容,因此也不会出现任何内容。
您应该将
chrome
替换为 browser
,正如您所说的那样。 迟早chrome
会消失。
根据您正在做什么,您可能不需要
tabs
。对于问题中的片段,您绝对不需要它。