获取nsIChannel请求的nsIDOMWindow始终在e10s上返回null

时间:2014-12-18 20:37:28

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

我有一个observer on" http-on-modify-request"我需要获得与该请求相关联的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)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我自己没有尝试过,所以请耐心等待:

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

答案 1 :(得分:0)

要与内容对话,此类用例的推荐路径可能为Frame Scripts,有关详细信息,请参阅MDN上的此文档。