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

如何使用JavaScript获取HTML节点所属的窗口对象?,javascript,xul,xulrunner,Javascript,Xul,Xulrunner,由于有几个iFrame、XUL浏览器元素等等,我的XULRunner应用程序中有许多窗口对象。我正在寻找使用JavaScript查找指定节点所属的窗口对象的最佳方法 因此,更具体地说,给定节点x,我需要找到包含x的特定窗口对象。您可能需要使用self。self是对当前文档的引用 从iframe内开始: <body> <div id="example">Example!</div> <script type="text/javascript">

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


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

您可能需要使用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>

例子!
window.onload=函数(){
var exampleNode=document.getElementById('example');
exampleNode.bar=函数(){
//最高的窗口对象:
顶部
//父节点:
自己
//父节点(IE中除外);
this.ownerDocument.defaultView;
};
};
遍历多个窗口对象:

<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中所做的那样(对于旧式框架集),框架具有名称属性。给定对象相对于顶部窗口对象的位置,可以使用子对象的名称访问该对象

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


self.advision

我找到了我想要的属性组合:


node.ownerDocument.defaultView


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

+1对于您的问题,这正是我想要的,感谢您通过回答自己直接给出的提示

我在谷歌上搜索了一下,根据跨浏览器的表格,我认为正确的答案是:

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是执行此操作的标准方法。这在Safari和Opera的网页上也会起作用。