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

时间:2009-08-27 00:06:59

标签: javascript html document

我可以获得window.document但是如何获得document.window?我需要知道如何在所有浏览器中执行此操作。

6 个答案:

答案 0 :(得分:100)

如果您确定它是一个窗口,可以使用document.defaultView,并且可以在IE 9之前跳过Microsoft浏览器。

答案 1 :(得分:17)

跨浏览器解决方案很复杂,这里是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

has(“ie”)对IE返回true(否则返回false)

答案 2 :(得分:3)

嗯,这是我选择的解决方案。它有效,但我讨厌它。

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

答案 3 :(得分:1)

我选择从DOCUMENT注入@angular/platform-browser令牌:

import { DOCUMENT } from '@angular/platform-browser'

然后访问父级:

constructor(@Inject(DOCUMENT) private document: any) {
}

public ngOnInit() {
  // this.document.defaultView || this.document.parentWindow;
}

答案 4 :(得分:0)

首先让我们清楚。当您使用框架,iframe和多个窗口时,这种事情通常是必要的,因此“窗口只是全局对象”是一个令人不满意的答案,如果你有一个句柄是来自另一个的文档窗口而不是你所在的窗口。

第二,遗憾的是没有直接获取窗口对象的方式。有间接的方式。

要使用的主要机制是window.name。从某个父窗口创建窗口或框架时,通常可以为其指定一个唯一的名称。该窗口中的任何脚本都可以在window.name中获得。窗口外的任何脚本都可以访问其所有子窗口的window.name。

要获得更具体的信息,需要有关具体情况的更多信息。但是,在子脚本可以与父脚本通信的任何情况下,反之亦然,它们总是可以通过名称相互识别,这通常就足够了。

答案 5 :(得分:-3)

The Window object is the top level object in the JavaScript hierarchy,所以只需将其称为窗口

修改 Promote JS努力之前的原始答案。 Mozilla Developer Network上的JavaScript technologies overview说:

  

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

编辑2: 在阅读了作者对他的问题的评论(以及得到downvotes)之后,这似乎与iframe的文档窗口有关。请查看window.parentwindow.top,然后将它们进行比较以推断您的文档窗口。

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