firefox - 获取 nsIChannel 请求的 nsIDOMWindow 在 e10s 上总是返回 null

标签 firefox firefox-addon firefox-addon-sdk multiprocess

我在“http-on-modify-request”上有一个 observer,我需要获取与该请求相关联的 DOMWindow

以下代码取自 AdBlock Plus 并基于 this article

function getRequestWindow(/**nsIChannel*/ channel) /**nsIDOMWindow*/
  {
    try
    {
      if (channel.notificationCallbacks)
        return channel.notificationCallbacks.getInterface(Ci.nsILoadContext).associatedWindow;
    } catch(e) {}

    try
    {
      if (channel.loadGroup && channel.loadGroup.notificationCallbacks)
        return channel.loadGroup.notificationCallbacks.getInterface(Ci.nsILoadContext).associatedWindow;
    } catch(e) {}

 return null;
}

但是,此代码不再适用于多进程 Firefox(v36+,现在在 Firefox Nightly 上)。

有任何想法吗?

最佳答案

我自己还没有尝试过,所以请带上一粒盐:

您可以从 nsIChannel.loadInfo 中获取 innerWindowId,而不是从 channel 中获取 nsIDOMWindow 本身。然后可以通过 QueryInterfacensIDOMWindowUtils 在框架脚本中解析窗口 ID。

关于firefox - 获取 nsIChannel 请求的 nsIDOMWindow 在 e10s 上总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555262/

相关文章:

ruby /瓦提尔 : firefox headless

javascript - 当我将应用程序上传到网络服务器时,Firefox 中的缓存出现问题

javascript - 在 Add-on SDK 主附加脚本和 sdk/page-worker 脚本之间通信

python - 无法使用 cfx run 运行我开发的 Firefox 插件

jquery - 如何将 Jquery 包含在我的 Firefox Jetpack Addon 的后台脚本(而不是内容脚本)中?

html - 三个内联 div 高度响应在 Firefox 上不起作用

jquery - JQuery 对话框中的 iFrame 在 Firefox 和 Chrome 中加载为空

javascript - document.body.addEventListener 不工作

javascript - 无法从循环外访问数组 firefox addon sdk

javascript - 火狐插件: get document from a tab