Можно ли получить объект окна из события в handleEvent?

Как и в вопросе... как получить window объект от события, запущенного в window сфера например:

handleEvent: function(event) {

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

Я могу получить window объект из других API. Мне было интересно, можно ли было получить его от уволенного event,

Ссылка:
handleEvent
Фрагмент кода с помощью handleEvent

3 ответа

Решение

Я узнал ответ... любой из них получит window объект из события

event.view event.view
event.target.ownerDocument.defaultView event.target
event.originalTarget.ownerGlobal event.originalTarget (нестандартный)

Это зависит от события. Но чаще всего да, вы можете. Сделайте 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);

Следующее заполнит переменные окна и документа, если они еще не существуют. Это должно работать из любой области видимости / контекста:

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;
Другие вопросы по тегам