如何从Document对象获取Window对象?

我可以得到window.document,但我怎么能得到document.window? 我需要知道如何在所有的浏览器中做到这一点。

Window对象是JavaScript层次结构中的顶层对象 ,因此只需将其称为窗口即可

编辑: 促进JS努力之前的原始答案。 Mozilla开发者networking上的JavaScript技术概述说:

在浏览器环境中,这个全局对象是窗口对象。

编辑2:在阅读作者对他的问题的评论(并获得降低评论)之后,这似乎与iframe的文档窗口有关。 看看window.parent和window.top ,也许比较它们来推断你的文档窗口。

if (window.parent != window.top) { // we're deeper than one down } 

你可以去document.defaultView如果你确定它的一个窗口,它可以跳过IE浏览器之前的微软浏览器。

一个跨浏览器的解决scheme是复杂的,这是如何dojo(从window.js :: get()):

 // In some IE versions (at least 6.0), document.parentWindow does not return a // reference to the real window object (maybe a copy), so we must fix it as well // We use IE specific execScript to attach the real window reference to // document._parentWindow for later use if(has("ie") && window !== document.parentWindow){ /* In IE 6, only the variable "window" can be used to connect events (others may be only copies). */ doc.parentWindow.execScript("document._parentWindow = window;", "Javascript"); //to prevent memory leak, unset it after use //another possibility is to add an onUnload handler which seems overkill to me (liucougar) var win = doc._parentWindow; doc._parentWindow = null; return win; // Window } return doc.parentWindow || doc.defaultView; // Window 

已经(“ie”)为IE返回true(否则为false)

那么,这是我的解决scheme。 它的工作,但我讨厌它。

 getScope : function(element) { var iframes = top.$$('iframe'); var iframe = iframes.find(function(element, i) { return top[i.id] ? top[i.id].document == element.ownerDocument : false; }.bind(this, element)); return iframe ? top[iframe.id] : top; } 

首先让我们清楚。 当你使用框架,iframe和多个窗口时,这种事情通常是必须的,所以“窗口就是全局对象”是一个令人无法接受的答案,如果你有一个句柄是另一个窗口的文档而不是一个你在。

其次,不幸的是没有直接的窗口对象。 有间接的方式。

使用的主要机制是window.name。 当从一些父窗口创build窗口或框架时,通常可以给它一个唯一的名称。 该窗口内的任何脚本都可以在window.name中获得。 窗口外的任何脚本都可以获得其所有子窗口的window.name。

要获得比这更具体的情况需要更多的信息。 然而,在任何情况下,孩子的脚本可以与父母的脚本进行交stream,反之亦然,他们总是可以通过名字相互识别,这通常就足够了。