我可以获得window.document
但是如何获得document.window
?我需要知道如何在所有浏览器中执行此操作。
答案 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.parent和window.top,然后将它们进行比较以推断您的文档窗口。
if (window.parent != window.top) {
// we're deeper than one down
}