Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Communication et Arbrorescence Javascript sous Prototype

Envoyé par : Arkham

Date : 02/11/2006 23:17

Bonjour à tous,

J'aimerais remplacer les fenêtre flottantes (les popup ouvertes avec un classique open.window) de mes applications web par des frames solidaire du navigateur et plus jolies par la même occasion.

Je me suis ainsi orienté vers Prototype, qui réalise cela parfaitement, même si il est un peu lourd...

Soit, je viens à vous car j'ai un problème de communication entre les différentes parties.

Avant, depuis la fenêtre popup, et pour interférer avec le formulaire de la fenêtre principale, je réalisais par exemple en cliquant sur le bouton un tranfert des données en fermant par la même occasion la fenêtre :

opener.document.NomDuFormulairePrincipal.NomDuChamp.value = document.NomDuFormulairePopup.NomDuChamp.value;
opener.document.NumDuFormulairePrincipal.submit();
self.close();

Je désire avec Prototype continuer d'utiliser comme contenu des fenêtres popup l'URL d'une autre page (pour son indépendance). Mais voilà, le code Javascript ne fonctionne pas du tout avec Prototype alors que la même page ouverte dans une fenêtre popup classique fonctionne parfaitement.

J'ai beau chercher, je ne trouve pas l'astuce pour atteindre les différentes parties de mes pages.

Ma question est donc : Comment réaliser en Javascript la communication entre les fenêtres Prototype et la fenêtre principale ? J'imagine que l'arborescence n'est plus la même, mais je n'arrive pas découvrir celle qui fonctionne.

Merci par avance.

# Re: Communication et Arbrorescence Javascript sous Prototype

Envoyé par : papy

Date : 03/11/2006 10:28

Si je comprend bien, tu as redéclaré la fonction window.open de manière à ouvrir une page normal plutôt qu'une simple popup de type alert ou confirm

Si c'est le cas c'est à toi de gérer la dépendance entre les deux fenêtres, je m'explique :

la fonction standard open doit positionner la propriété opener de la nouvelle fenêtre avec la valeur de la fenêtre courante, quelque chose du genre en tout cas. Tu dois donc faire pareil dans ton fonction personnalisée

function myopen(...) {
...
nouvelleFenetre.opener = window; //(peut etre document ?)
...
}

# Re: Communication et Arbrorescence Javascript sous Prototype

Envoyé par : Arkham

Date : 03/11/2006 20:05

Bonjour,

Non, je n'ai pas refait le open.window, je suis loin d'être capable de ça. :D Comment expliquer ça, voici un autre exemple :

page1.html

  • Formulaire : form1
  • Champ : text1

page2.html

  • Formulaire : form2
  • Champ : text2

Ce que je faisais avant : La page2 s'ouvre en popup depuis la page1 avec la simple fonction :

<a onClick="window.open('page2.html','popup','width=350,height=120')">Ouvrir page2</a>

Ensuite je désire par exemple retrouver sur la page principale, ce que j'écris dans la fenêtre popup.

En page2 on aurait quelque chose comme ça :

<script>
function Copie()
{
opener.document.form1.text1.value = document.form2.text2.value;
}
</script>

<form name='form2' ...>
<input type='text' name='text2' onKeyPress='Copie()'>
</form>

Lorsque l'on écrit dans la petite fenêtre popup, ça met à jour l'autre en y écrivant la même chose.

Maintenant, j'aimerais faire pareil mais en utilisant Prototype à la place d'un classique open.window.

winpop = new Window('winpop_id', {className: "mac_os_x", title: "Page Popup", width:350, height:120, url:"page2.html"});
winpop.setDestroyOnClose();
winpop.setLocation(35,35);
winpop.show();

Mais voilà, le code java pour le transfert des données ne fonctionne plus (je suppose que pour atteindre le contenu de la fenêtre Prototype, il y a un autre chemin à prendre dans l'arborescence Javascript... Mais je ne met pas la main dessus)

J'espère que ce modeste exemple vous aide à comprendre mon problème.

Encore merci de votre aide.

# Re: Communication et Arbrorescence Javascript sous Prototype

Envoyé par : papy

Date : 06/11/2006 09:55

Oups, je n'avais pas compris que tu utilisais la librairie Prototype ;)

Apparement tu dois ajouter le mot clé parent lors de la création de ta fenêtre :

winpop = new Window('winpop_id', {parent: window, className: "mac_os_x", title: "Page Popup", width:350, height:120, url:"page2.html"});

cf http://prototype-window.xilinus.com/docu(..)

# Re: Communication et Arbrorescence Javascript sous Prototype

Envoyé par : Arkham

Date : 08/11/2006 19:11

C'est bien ça, merci. Je peux également l'utiliser dans la fonction.

function Copie()
{
parent.document.form1.text1.value = document.form2.text2.value;
}

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.