Hoe kan ik het venster object uit het document object te krijgen?

stemmen
46

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

De vraag is gesteld op 27/08/2009 om 01:06
bron van user
In andere talen...                            


6 antwoorden

stemmen
79

U kunt gaan met document.defaultViewals je zeker weet dat het een raam en zijn prima om Microsoft browsers slaan voordat IE 9.

antwoordde op 27/08/2009 om 02:50
bron van user

stemmen
17

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)

antwoordde op 21/04/2012 om 17:08
bron van user

stemmen
3

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;
}   
antwoordde op 28/08/2009 om 18:44
bron van user

stemmen
0

Ik heb gekozen voor het injecteren DOCUMENTtoken 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;
}
antwoordde op 25/04/2018 om 13:14
bron van user

stemmen
0

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.

antwoordde op 06/06/2013 om 02:18
bron van user

stemmen
-2

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
}
antwoordde op 27/08/2009 om 01:25
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more