Как я могу получить объект окна, к которому относится узел HTML с помощью JavaScript? - PullRequest
8 голосов
/ 22 октября 2008

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

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

Ответы [ 3 ]

11 голосов
/ 28 апреля 2010

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

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

3 голосов
/ 22 октября 2008

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

node.ownerDocument.defaultView

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

2 голосов
/ 22 октября 2008

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

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

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

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

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

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

self.advertisement

...