由于有几个 iframe、XUL 浏览器元素等等,我的 XULRunner 应用程序中有很多窗口对象。我正在寻找使用 JavaScript 查找指定节点所属的窗口对象的最佳方法。
所以,更具体地说,给定节点 x,我需要找到包含 x 的特定窗口对象。
由于有几个 iframe、XUL 浏览器元素等等,我的 XULRunner 应用程序中有很多窗口对象。我正在寻找使用 JavaScript 查找指定节点所属的窗口对象的最佳方法。
所以,更具体地说,给定节点 x,我需要找到包含 x 的特定窗口对象。
+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;
请让我知道你的想法。
您可能想使用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的引用,您可以使用它们的名称和关系导航到树中的其他全局对象,这与遍历 DOM的方式非常相似。
当您有多个窗口对象时,就像在 iframe 的情况下(使用老式框架集)一样,框架具有name 属性。给定对象相对于顶部窗口对象的位置,您可以使用子对象的名称来访问该对象。
<iframe src ="/default.html" name="advertisement"></iframe>
然后从顶部窗口的上下文中:
self.advertisement
我找到了我所追求的属性组合:
node.ownerDocument.defaultView
这将返回节点所属的窗口对象。请注意,这在 IE 中不起作用。