我正在为Microsoft Edge开发Web扩展名;我的浏览器正在使用Edgehtml 14.14393。
我正在尝试在以下代码中更改User-Agent
字符串:
function useDifferentUserAgent() {
var obsh = browser.webRequest.onBeforeSendHeaders;
// attach my listener with filter and extraInfoSpec
obsh.addListener(
rewriteUserAgentHeader,
{ tabId: tab.id, urls: ["*://*.someurl.com/*"] },
['requestHeaders', 'blocking']
);
// now that the listener is attached, this should trigger the event, right?
browser.tabs.update(tab.id, { url: 'http://someurl.com/foo/bar' });
if (obsh.hasListener(rewriteUserAgentHeader)) {
obsh.removeListener(rewriteUserAgentHeader);
}
}
function rewriteUserAgentHeader(details) {
var headers = details.requestHeaders;
var blockingResponse = {};
for (var i = 0, l = headers.length; i < l; ++i) {
if (headers[i].name.toLowerCase() == 'user-agent') {
headers[i].value = "some other user agent string";
break;
}
}
blockingResponse.requestHeaders = headers;
return blockingResponse;
};
browser.tabs.update()
调用按预期打开新的URL,但是当我在rewriteUserAgentHeader
函数的第一行中放置断点时,它永远不会击中。我只能假设:
- 我做错了(很可能)或
-
update
调用不会触发onBeforeSendHeaders
。
更新
我发现我缺少manifest.json
文件中的host permission
-这是我更新的permissions
部分:
"permissions": [
"tabs",
"activeTab",
"webRequest",
"webRequestBlocking",
"*://*.someurl.com/*"
]
...但是,穆德维尔没有欢乐。我对照明的追求仍在继续。在此事件处理程序中,我的断点从未击中。与往常一样,任何帮助都非常感谢。
browser.tabs.update()
的呼叫是异步调用;它不会停止并等待该呼叫在转到removeListener()
方法之前完成。
tl; dr-到浏览器触发我已经脱离事件的消息时。