75 votes

Puis-je passer une variable JavaScript à une autre fenêtre de navigateur?

J'ai une page qui génère un popup de la fenêtre du navigateur. J'ai une variable JavaScript dans le parent de la fenêtre du navigateur, et je voudrais le passer à la remonté la fenêtre du navigateur.

Est-il un moyen de faire cela? Je sais que cela peut être fait à travers des images dans la même fenêtre du navigateur, mais je ne suis pas sûr si cela peut être fait à travers les fenêtres de navigateur.

113voto

Victor Points 3774

Mettre le code à la question, vous pouvez le faire à partir de la fenêtre parent:

var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;

ou ce à partir de la nouvelle fenêtre:

var myVariable = window.opener.thisIsAnObject;

Je préfère le plus tard, parce que vous aurez probablement besoin d'attendre la nouvelle page à charger de toute façon, de sorte que vous pouvez accéder à l'un de ses éléments, ou ce que vous voulez.

46voto

MarkR Points 37178

À condition que les fenêtres sont du même domaine de sécurité, et vous avez une référence à l'autre fenêtre, oui.

Javascript la méthode open() renvoie une référence à la fenêtre de création (ou de la fenêtre existante si elle réutilise une existante). Chaque fenêtre créée de cette manière devient une propriété est appliquée "de la fenêtre.ouvreur de" pointant vers la fenêtre qui l'a créé.

Soit pouvez ensuite utiliser le DOM (sécurité selon le cas), l'accès à des propriétés de l'autre, ou de ses documents,images etc.

8voto

bobince Points 270740

Oui, les scripts peuvent accéder à des propriétés d'autres fenêtres dans le même domaine qu'ils ont une poignée (généralement acquise à travers la fenêtre.ouvrir/ouvre-porte et de la fenêtre.images/parent). Il est généralement plus facile à gérer pour appeler des fonctions définies sur l'autre fenêtre plutôt que de jouer avec des variables directement.

Cependant, windows peut mourir ou à se déplacer sur et les navigateurs traitent différemment quand ils le font. Vérifiez qu'une fenêtre (un) est ouverte!de la fenêtre.fermé) et (b) a la fonction que vous attendez disponibles, avant d'essayer de l'appeler.

Des valeurs simples comme les chaînes sont fines, mais en général, ce n'est pas une bonne idée de passer des objets complexes comme les fonctions, les éléments du DOM et de la fermeture de windows. Si une fenêtre enfant stocke un objet à partir de son ouvreur, puis l'ouvre-porte se ferme, que l'objet peut devenir "morte" (dans certains navigateurs tels que IE), ou provoquer une fuite de mémoire. Bizarre les erreurs qui peuvent en découler.

3voto

Grant Wagner Points 14085

Dans votre fenêtre parent:

var yourValue = 'something';
window.open('/childwindow.html?yourKey=' + yourValue);

Puis dans childwindow.html:

var query = location.search.substring(1);
var parameters = {};
var keyValues = query.split(/&/);
for (var keyValue in keyValues) {
    var keyValuePairs = keyValue.split(/=/);
    var key = keyValuePairs[0];
    var value = keyValuePairs[1];
    parameters[key] = value;
}

alert(parameters['yourKey']);

Il y a potentiellement beaucoup de contrôle d'erreur que vous devriez faire dans l'analyse de vos paires clé/valeur, mais je ne suis pas y compris ici. Peut-être que quelqu'un peut fournir une plus grande intégration Javascript chaîne de requête de l'analyse de routine dans une réponse plus tard.

2voto

knut Points 66

Vous pouvez passer des variables, et la référence à des choses dans la fenêtre parente assez facilement:

// open an empty sample window:
var win = open("");
win.document.write("<html><body><head></head><input value='Trigger handler in other window!' type='button' id='button'></input></body></html>");

// attach to button in target window, and use a handler in this one:
var button = win.document.getElementById('button');

button.onclick = function() {
     alert("I'm in the first frame!");   
}

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