62 votes

Comment puis-je obtenir l'objet Window à partir de l'objet Document?

Je peux obtenir window.document mais comment puis-je obtenir document.window? J'ai besoin de savoir comment le faire dans tous les navigateurs.

117voto

kennebec Points 33886

Vous pouvez utiliser document.defaultView si vous êtes certain que c'est une fenêtre et que vous pouvez ignorer les navigateurs Microsoft avant IE 9.

18voto

Bill Keese Points 1005

Une solution multi-navigateur est compliquée, voici comment le dojo le fait (depuis 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") renvoie vrai pour IE (et faux sinon)

3voto

Joren Points 2033

Eh bien, voici la solution avec laquelle je suis allé. Cela fonctionne, mais je le 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;
}
 

0voto

Breton Points 9625

tout d'abord, soyons clairs. ce genre de chose est souvent nécessaire lorsque vous travaillez avec des frames, iframes, et plusieurs fenêtres, et ainsi de "la fenêtre est juste l'objet global" est une belle petite réponse si tout ce que vous avez une poignée de est un document à partir d' une autre fenêtre que celle où vous vous trouvez.

deuxièmement, il n'est malheureusement pas directe manière d'arriver à l'objet window. il y a des moyens indirects.

le principal mécanisme à utiliser est la fenêtre.nom. lors de la création d'une fenêtre ou d'une image à partir d'un parent de la fenêtre, vous pouvez généralement donner un nom unique. tous les scripts à l'intérieur de cette fenêtre peut obtenir de la fenêtre.nom. tous les scripts en dehors de la fenêtre de la fenêtre.nom de tous ses enfants de windows.

pour obtenir de plus précis que ça nécessite plus d'info à propos de la situation spécifique. cependant, dans toute situation où l'enfant scripts peuvent communiquer avec les parents des scripts ou vice-versa, ils peuvent toujours s'identifier les uns les autres par leur nom, et ce qui est généralement suffisant.

-6voto

Kevin Hakanson Points 15498

L'objet de la Fenêtre du haut est le niveau de l'objet dans le code JavaScript de la hiérarchie, il suffit donc de se référer à elle comme de la fenêtre

Edit: Réponse originale à cette question avant de Promouvoir JS effort. JavaScript technologies aperçu sur Mozilla Developer Network dit:

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

Edit 2: Après la lecture de l'auteur du commentaire à sa question (et obtenir de downvotes), ce qui semble être liée à l'iframe de la fenêtre de document. Jetez un oeil à la fenêtre.parent et fenêtre.haut et peut-être de les comparer à déduire de votre fenêtre de document.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X