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