browser.tabs.update() 是否触发了 browser.webRequest.onBeforeSendHeaders 事件?
Does browser.tabs.update() Trigger the browser.webRequest.onBeforeSendHeaders Event?
我正在为 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/*"
]
...但是,MudVille 仍然没有欢乐;我对照明的追求仍在继续。我在事件处理程序中的断点从未命中。一如既往的任何帮助,我们将不胜感激。
对browser.tabs.update()
的调用是异步调用;在继续 removeListener()
方法之前,它不会停止并等待该调用完成。
TL;DR - 当浏览器触发消息时,我已经分离了事件。
我正在为 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/*"
]
...但是,MudVille 仍然没有欢乐;我对照明的追求仍在继续。我在事件处理程序中的断点从未命中。一如既往的任何帮助,我们将不胜感激。
对browser.tabs.update()
的调用是异步调用;在继续 removeListener()
方法之前,它不会停止并等待该调用完成。
TL;DR - 当浏览器触发消息时,我已经分离了事件。