我有一个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)。
有什么想法吗?
答案 0 :(得分:1)
我自己没有尝试过,所以请耐心等待:
不是从通道获取nsIDOMWindow本身,而是从nsIChannel.loadInfo获取innerWindowId。然后可以通过QueryInterface
nsIDOMWindowUtils在框架脚本中解析窗口ID。
答案 1 :(得分:0)
要与内容对话,此类用例的推荐路径可能为Frame Scripts,有关详细信息,请参阅MDN上的此文档。