43 votes

Accéder à une fenêtre par son nom

Si j'ouvre une fenêtre en utilisant

window.open('myurl.html', 'windowname', 'width=100,height=100');

Comment puis-je faire référence à la nouvelle fenêtre (à partir de la page qui l'a ouverte) en utilisant "windowname" ? Cette question porte précisément sur ce point. Je sais que je pourrais sauvegarder une référence à la poignée en utilisant "var mywin = window.open(...)" mais cela ne m'intéresse pas dans cette situation.

Merci, - Dave

2 votes

Attribuer la valeur de retour de window.open() à une variable. C'est la seule bonne solution.

5 votes

-1 pour ne pas avoir lu la question de Daves. var mywin=window.open() est exactement ce dont Dave se moque.

2 votes

Je ne suis pas sûr de comprendre la question... Vous dites que vous voulez un moyen de référencer une fenêtre que vous ouvrez à partir de l'opener, mais vous dites ensuite que vous ne vous souciez pas de la façon de le faire ?

23voto

Dans firefox (cela pourrait fonctionner dans d'autres navigateurs, mais ce n'est pas mon problème), j'ai pu référencer une fenêtre à travers plusieurs chargements de pages avec

var w = window.open("", "nameofwindow");

Cela permet d'ouvrir une nouvelle fenêtre si elle n'existe pas et de renvoyer une référence à la fenêtre existante si elle existe, sans modifier le contenu de la fenêtre.

Avec jQuery, j'ai pu ajouter un nouveau contenu, pour créer une collection rapide de liens intéressants, comme ceci

$('body', w.document).append(link_tag);

0 votes

Qu'est-ce que nameofwindow

0 votes

@Dwigh c'est à vous de le définir

22voto

Wladimir Palant Points 34829

Si vous n'avez pas sauvegardé une référence à la fenêtre, il n'y a aucun moyen de la restaurer. En revanche, il n'est pas possible de la restaurer, si cette fenêtre est toujours ouverte et si la page chargée à cet endroit appartient au même domaine que votre page, vous pouvez y exécuter du code JavaScript :

window.open("javascript:doSomething()", "windowname");

La question de savoir si c'est suffisant dans votre cas dépend de ce que vous essayez d'obtenir.

2 votes

Ugh. Même si cela fonctionne, j'espère que personne ne l'utilisera vraiment. Mais je me demande si quelque chose comme window.open("javascript:void(window.opener.windowname = window);", "windowname") fonctionnerait... cela ferait exactement ce que le gars a demandé (non pas que quelqu'un devrait utiliser un tel hack).

1 votes

@ThiefMaster, je pensais que c'était une solution plutôt élégante (en supposant qu'elle fonctionne réellement). Quelle est votre objection à cette solution, exactement ?

0 votes

Il s'agit d'un hack pour un problème que l'on s'est créé soi-même - du moins, je ne vois pas pourquoi il serait impossible de stocker la référence de la fenêtre. Vous pouvez toujours faire quelque chose comme wins['foo'] = window.open('...', 'foo'); vous permettant d'accéder à une correspondance nom-fenêtre-objet par l'intermédiaire de l'interface globale var gagne`

8voto

Johannes Points 77

Petr a raison :

var w = window.open("", "nameofwindow");

fonctionne dans tous les navigateurs, je l'utilise pour récupérer la référence à l'objet fenêtre précédemment ouvert par une autre page. Le seul problème est l'ouverture initiale de la page, si la popup n'existe pas, vous obtiendrez une nouvelle fenêtre avec une page blanche.

J'ai essayé d'invoquer une fonction Javascript dans le contexte de l'autre document afin de vérifier si j'ai ouvert une nouvelle fenêtre ou récupéré la page déjà active. Si la vérification échoue, j'invoque à nouveau window.open pour charger le contenu de la fenêtre contextuelle :

var w = window.open("http://mydomain.com/myPopup", "nameofwindow");

J'espère que cela vous aidera.

0voto

ThiefMaster Points 135805

Ce n'est pas possible. Le nom de la fenêtre ne doit être utilisé que dans la fonction target="..." de liens/formulaires ou d'utiliser à nouveau le même nom dans une autre window.open pour ouvrir une nouvelle url dans cette fenêtre.

0 votes

Et vous avez donné exactement la même solution

0voto

Tom Jiang Points 176

Essayez d'ouvrir à nouveau cette fenêtre avec le nom, mais l'URL est '', pour vérifier s'il s'agit d'une fenêtre vide ou non. Si elle est ouverte, vous obtiendrez la fenêtre ; sinon, une nouvelle fenêtre s'ouvrira et vous devrez la fermer. L'ajout des enfants dans localStorage permet d'éviter l'ouverture d'une nouvelle fenêtre vierge.

Veuillez vérifier mon code dans https://github.com/goldentom66/ParentChildWindow

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