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

Firefox 是否可以从handleEvent中的事件获取窗口对象?,firefox,firefox-addon,firefox-addon-restartless,Firefox,Firefox Addon,Firefox Addon Restartless,正如在问题中。。。如何从窗口范围中触发的事件中获取窗口对象,例如: handleEvent: function(event) { // is window object available here and can we get it from event } 我可以从其他API获取窗口对象。我想知道是否可以从激发的事件中获取它 参考资料: 这取决于事件。但通常情况下,是的,你可以。在事件上做一个console.log,然后你可能会看到类似targetcromewindow之类的东西,

正如在问题中。。。如何从
窗口
范围中触发的事件中获取
窗口
对象,例如:

handleEvent: function(event) {

  // is window object available here and can we get it from event
}
我可以从其他API获取
窗口
对象。我想知道是否可以从激发的
事件中获取它

参考资料:


这取决于事件。但通常情况下,是的,你可以。在事件上做一个console.log,然后你可能会看到类似targetcromewindow之类的东西,这个我不记得了,虽然我在做某事时遇到过它

但通常情况下,获取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);

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

事件视图

event.target.ownerDocument.defaultView


event.originalTarget.ownerGlobal
(非标准)

以下内容将填充窗口和文档变量(如果它们不存在)。它应在任何范围/背景下工作:

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;

非常感谢。那代码太长了。。我可以使用
Services.ww.activeWindow
轻松获取窗口。。我想知道这是否可能发生在被解雇事件中;)查看event.target和我列出的其他内容,然后在上面执行.ownerDocument.defaultView就是这样!event.view太棒了!谢谢你,伙计!我也很喜欢这个非标准的提示。这并不能保证有效,但它几乎会一直有效。它假定事件是在GUI/DOM目标上触发的(即,从浏览器中)。这可能不是
窗口
对象。@Makyen。。。大概但我的意思是形成一个窗口环境。。。我会澄清我的问题你真的应该在这个问题上提供更多的背景。