Ik kan window.document krijgen, maar hoe kan ik document.window? Ik moet weten hoe het te doen in alle browsers.
Hoe kan ik het venster object uit het document object te krijgen?

The Window object is het hoogste niveau object in de JavaScript-hiërarchie , dus gewoon verwijzen naar het als venster
Edit: Original antwoord vóór bevorderen JS inspanning. JavaScript technologieën overzicht op Mozilla Developer Network zegt:
In een browser, dit globale object is het venster object.
Probleem 2: Na het lezen van de opmerking van de auteur op zijn vraag (en het krijgen van downvotes), dit lijkt verband te houden met document venster van de iframe. Neem een kijkje op window.parent en window.top en misschien te vergelijken met je document venster af te leiden.
if (window.parent != window.top) {
// we're deeper than one down
}
U kunt gaan met document.defaultView
als je zeker weet dat het een raam en zijn prima om Microsoft browsers slaan voordat IE 9.
Nou, dit is de oplossing die ik ging met. Het werkt, maar ik haat het.
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;
}
Een cross-browser oplossing is ingewikkeld, hier is hoe dojo doet (van window.js :: te krijgen ()):
// 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
heeft ( "ie") geeft true voor IE (anders false)
Ten eerste laten we duidelijk zijn. dit soort dingen is het vaak nodig wanneer u werkt met frames, iframes en meerdere vensters, en zo "het raam is gewoon de wereldwijde object" is een onbevredigend antwoord als alles wat je hebt een handvat om een document uit een ander venster dan het degene die je bent in.
tweede, helaas is er geen directe manier om bij het raam object. Er zijn indirecte manieren.
het primaire mechanisme moet gebruiken window.name. bij het maken van een venster of een frame van een aantal bovenliggende venster, kunt u meestal geef het een unieke naam. scripts binnen dat venster kan krijgen op window.name. alle scripts buiten het raam kan krijgen op de window.name van al haar kind ramen.
specifieker dan dat er meer informatie over de specifieke situatie moeten krijgen. echter in elke situatie waar het kind scripts kan communiceren met de ouders scripts of vice versa, kunnen ze altijd elkaar bij naam te noemen, en dit is meestal genoeg.
Ik heb gekozen voor het injecteren DOCUMENT
token uit @angular/platform-browser
:
import { DOCUMENT } from '@angular/platform-browser'
en dan toegang tot de ouder:
constructor(@Inject(DOCUMENT) private document: any) {
}
public ngOnInit() {
// this.document.defaultView || this.document.parentWindow;
}