如何使用JavaScript获取HTML节点所属的窗口对象?

时间:2008-10-21 23:56:02

标签: javascript xul xulrunner

由于有几个iframe,XUL浏览器元素等等,我的XULRunner应用程序中有许多窗口对象。我正在寻找使用JavaScript找到指定节点所属的窗口对象的最佳方法。

因此,更具体地说,给定节点x,我需要找到包含x的特定窗口对象。

3 个答案:

答案 0 :(得分:11)

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

让我知道你的想法。

答案 1 :(得分:3)

我找到了我追求的属性组合:

node.ownerDocument.defaultView

返回节点所属的窗口对象。请注意,这在IE中不起作用。

答案 2 :(得分:2)

您可能想要使用自我。 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 ,您可以使用名称和关系导航到树中的其他全局对象,就像您遍历DOM

当您有多个窗口对象时,就像在iframe(具有旧学校框架集)的情况下一样,该框架具有名称属性。给定对象相对于顶部窗口对象的位置,您可以使用子名称来访问该对象。

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

然后从顶部窗口的上下文:

self.advertisement