我在“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 本身。然后可以通过 QueryInterface
到 nsIDOMWindowUtils 在框架脚本中解析窗口 ID。
关于firefox - 获取 nsIChannel 请求的 nsIDOMWindow 在 e10s 上总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555262/