是否可以从handleEvent中的事件中获取窗口对象



如问题。。。如何从window作用域中激发的事件中获取window对象,例如:

handleEvent: function(event) {
  // is window object available here and can we get it from event
}

我可以从其他API获取window对象。我想知道是否有可能从被解雇的event那里得到它。

参考:
handleEvent
使用handleEvent 的代码段

我找到了答案。。。其中任何一个都将从事件中获得window对象

event.view事件视图
event.target.ownerDocument.defaultView事件.target
event.originalTarget.ownerGlobal事件.原始目标(非标准)

这取决于事件。但大多数情况下,是的,你可以。在活动上做一个console.log,然后你可能会看到targetChromeWindow之类的东西,这个我不记得了,不过我在做某事时遇到过一次。

不过,通常情况下,获取event.target或relatedTarget或originalTarget(还有一个目标我忘了它是什么)并执行ownerDocument。默认查看

如果你想要铬窗口,你可以这样做:

var DOMWin = win.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);

如果窗口和文档变量不存在,下面将填充这些变量。它应该在任何范围/上下文中工作:

if (typeof window === "undefined") {
    //If there is no window defined, get the most recent.
    var window = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                           .getService(Components.interfaces.nsIWindowMediator)
                           .getMostRecentWindow("navigator:browser");
}
if (typeof document === "undefined") {
    //If there is no document defined, get it
    var document = window.content.document;
}

以下是一些可能有用的附加变量,具体取决于您正在做的事情:

if (typeof gBrowser === "undefined") {
    //If there is no gBrowser defined, get it
    var gBrowser = window.gBrowser;
}
var tab = gBrowser.selectedTab;
var browserForTab = gBrowser.getBrowserForTab( tab );
var notificationBox = gBrowser.getNotificationBox( browserForTab );
var ownerDocument = gBrowser.ownerDocument;

相关内容

  • 没有找到相关文章

最新更新