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

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

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


person Joel Anair    schedule 21.10.2008    source источник


Ответы (3)


+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;

Пожалуйста, дайте мне знать ваши мысли.

person Marco Demaio    schedule 28.04.2010

Я нашел комбинацию свойств, которые мне были нужны:

node.ownerDocument.defaultView

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

person Joel Anair    schedule 22.10.2008
comment
node.ownerDocument.defaultView — стандартный способ сделать это. Это также будет работать на веб-страницах в Safari и Opera. - person Shadow2531; 22.10.2008

Вы можете использовать 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>

Обход нескольких оконных объектов:

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

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

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

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

self.advertisement

person Community    schedule 22.10.2008