是否可以从handleEvent中的事件中获取window对象?

时间:2014-09-22 16:47:48

标签: firefox firefox-addon firefox-addon-restartless

在问题中......如何从window范围内触发的事件中获取window对象,例如:

handleEvent: function(event) {

  // is window object available here and can we get it from event
}

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

参考:
handleEvent
Code Snippet using handleEvent

3 个答案:

答案 0 :(得分:4)

我找到了答案......其中任何一个都会从事件中获取window对象

event.view event.view
event.target.ownerDocument.defaultView event.target
event.originalTarget.ownerGlobal event.originalTarget(非标准)

答案 1 :(得分:2)

这取决于事件。但大多数情况下,你可以。在事件上做一个console.log然后你可能会像targetChromeWindow或者其他东西,这个我记不起来了,虽然我在做某事时遇到过它。

最常见的是,获取event.target或relatedTarget或originalTarget(还有一个目标,我忘了它是什么)并执行ownerDocument.defaultView

如果您想要Chrome窗口,可以通过以下方式获得:

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

答案 2 :(得分:1)

如果窗口和文档变量尚不存在,则会填充以下内容。它应该适用于任何范围/上下文:

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;