Как я могу получить объект окна, к которому относится узел 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