Как я могу получить объект окна, который HTML node принадлежит JavaScript?

Из-за нескольких фреймов, элементов браузера XUL и т.д., у меня есть ряд оконных объектов в приложении XULRunner. Я ищу лучший способ найти объект окна, который указанный node принадлежит JavaScript.

Итак, если учесть node x, мне нужно найти конкретный объект окна, содержащий x.

Ответы

Ответ 1

+1 на ваш вопрос, это именно то, что я искал, и спасибо за подсказку, полученную непосредственно, отвечая на себя.

Я немного исказил и, согласно http://www.quirksmode.org/dom/w3c_html.html таблицы перекрестных браузеров, я думаю, что правильный ответ:

function GetOwnerWindow(html_node)
{
   /*
   ownerDocument is cross-browser, 
   but defaultView works on all browsers except Opera/IE that use parentWinow
   */
   return (html_node.ownerDocument.defaultView) ?
      html_node.ownerDocument.defaultView : 
      html_node.ownerDocument.parentWindow;
}

Или, может быть, даже лучше:

return html_node.ownerDocument.defaultView || html_node.ownerDocument.parentWindow;

Plz сообщите мне свои мысли.

Ответ 2

Я нашел комбинацию свойств я после:

node.ownerDocument.defaultView

Возвращает объект окна, к которому принадлежит node. Обратите внимание, что это не работает в IE.

Ответ 3

Вы можете использовать self. self - ссылка на текущий документ.

Внутри iframe:

<body>
<div id="example">Example!</div>
<script type="text/javascript">
    window.onload = function () {
        var exampleNode = document.getElementById('example');
        exampleNode.bar = function () {
            // The highest window object:
            top;
            // The parent node:
            self;
            // The parent node ( except in IE );
            this.ownerDocument.defaultView;
        };
    };
</script>
</body>

Перемещение нескольких объектов окна:

В объектной модели браузера основной объект окна называется верхний. Другие глобальные объекты расположены в древовидной структуре, которая происходит сверху. Со ссылкой на верхний вы можете перейти к другим глобальным объектам в дереве, используя их имена и отношения, в значительной степени так же, как вы пересекаете DOM.

Когда у вас есть несколько объектов окна, как и в случае iframe (из старых школьных наборов фреймов), фрейм имеет атрибут name. Учитывая положение объектов относительно объекта верхнего окна, вы можете использовать имя дочернего элемента для доступа к объекту.

<iframe src ="/default.html" name="advertisement"></iframe>

а затем из контекста верхнего окна:

self.advertisement