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

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

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

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;

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

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

node.ownerDocument.defaultView

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

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

Изнутри фрейма:

<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

Другие вопросы по тегам