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 函数的第一行放置断点时,它从未命中。我只能假设:

  1. 我做错了(很可能)或
  2. update 调用没有触发 onBeforeSendHeaders

更新

我发现我的 manifest.json 文件中缺少 host permission - 这是我更新的 permissions 部分:

"permissions": [
  "tabs",
  "activeTab",
  "webRequest",
  "webRequestBlocking",
  "*://*.someurl.com/*"
]

...但是,MudVille 仍然没有欢乐;我对照明的追求仍在继续。我在事件处理程序中的断点从未命中。一如既往的任何帮助,我们将不胜感激。

browser.tabs.update()的调用是异步调用;在继续 removeListener() 方法之前,它不会停止并等待该调用完成。

TL;DR - 当浏览器触发消息时,我已经分离了事件。