Comment puis-je obtenir l'objet de la fenêtre de l'objet de document?

voix
46

Je peux obtenir window.document mais comment puis-je obtenir document.window? Je dois savoir comment le faire dans tous les navigateurs.

Créé 27/08/2009 à 01:06
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
-2

L'objet de la fenêtre est l'objet de niveau supérieur dans la hiérarchie JavaScript , donc juste parler comme fenêtre

Edit: réponse originale avant Promouvoir JS effort. Technologies JavaScript aperçu sur le réseau Mozilla Developer dit:

Dans un environnement de navigateur, cet objet global est l'objet de la fenêtre.

Edit 2: Après avoir lu le commentaire de l'auteur à sa question (et se downvotes), cela semble être lié à la fenêtre du document de l'iframe. Jetez un oeil à window.parent et window.top et peut - être de les comparer pour déduire la fenêtre de votre document.

if (window.parent != window.top) {
  // we're deeper than one down
}
Créé 27/08/2009 à 01:25
source utilisateur

voix
79

Vous pouvez aller avec document.defaultViewsi vous êtes sûr de sa fenêtre et son accord pour sauter les navigateurs Microsoft avant IE 9.

Créé 27/08/2009 à 02:50
source utilisateur

voix
3

Eh bien, voici la solution que je suis allé avec. Il fonctionne, mais je déteste.

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;
}   
Créé 28/08/2009 à 18:44
source utilisateur

voix
17

Une solution navigateur cross est compliqué, voici comment il le fait dojo (de 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

a ( "ie") renvoie true pour IE (et sinon false)

Créé 21/04/2012 à 17:08
source utilisateur

voix
0

Tout d' abord , soyons clairs. ce genre de chose est souvent nécessaire lorsque vous travaillez avec des cadres, des iframes et des fenêtres multiples, et donc « la fenêtre est juste l'objet global » est une réponse peu satisfaisante si tout ce que vous avez une poignée est un document à partir d'une autre fenêtre que la un vous êtes.

En second lieu , malheureusement il n'y a pas directement moyen d'obtenir à l'objet de la fenêtre. il existe des moyens indirects.

le mécanisme primaire à utiliser est window.name. lors de la création d'une fenêtre ou un cadre d'une fenêtre parent, vous pouvez généralement donner un nom unique. les scripts à l'intérieur de cette fenêtre peuvent obtenir à window.name. les scripts en dehors de la fenêtre peuvent obtenir au window.name de toutes ses fenêtres enfants.

pour être plus précis que cela demande plus d'informations sur la situation spécifique. Cependant, dans tous les cas où les scripts enfants peuvent communiquer avec des scripts parents ou vice-versa, ils peuvent toujours identifier par leur nom, ce qui est généralement suffisant.

Créé 06/06/2013 à 02:18
source utilisateur

voix
0

J'ai choisi d'injecter le DOCUMENTjeton @angular/platform-browser:

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

puis accéder au parent:

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

public ngOnInit() {
  // this.document.defaultView || this.document.parentWindow;
}
Créé 25/04/2018 à 13:14
source utilisateur

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