Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

js dans iframe

6 réponses
Avatar
Olivier Masson
Bonjour,

j'ouvre une page edition.php dans une page à l'aide d'une iframe, au
moyen de mootools.

La page qui apparait doit exécuter du javascript dès son lancement (cad
son apparition dans ce cas) :

document.forms[0].ville.options[<?php echo $selected1 ?>].selected = true;
ajout(document.forms[0].ville.options[<?php echo $selected1
?>].value,'categorie');
document.forms[0].categorie.options[<?php echo $selected2 ?>].selected =
true;

La fonction ajout() est lu dans la page maitre et est donc bien reconnue
(par exemple si je la place dans un onChange).
Par contre, pas moyen d'executer ces 3 lignes à l'apparition de l'iframe
: le js dans l'entete du fichier edition.php est zappé (j'ai testé en
faisant des erreurs de syntaxe, qui ne sont pas détectées) et si je
place le code js directement dans le body de edition.php, même problème
(le js n'est même pas lu par le navigateur puisqu'il ne détecte pas, là
non plus, l'erreur de syntaxe).

Alors comment puis-je executer ces 3 lignes de JS à l'affichage de cette
page en "pop-up" iframe ? Sachant, et c'est la le problème, que les
valeurs $selected1 et 2 sont données par edition.php.

Hum... si une personne a compris, bravo :) et merci.

6 réponses

Avatar
Olivier Masson
Bonjour,

j'ouvre une page edition.php dans une page à l'aide d'une iframe, au
moyen de mootools.

La page qui apparait doit exécuter du javascript dès son lancement (cad
son apparition dans ce cas) :

document.forms[0].ville.options[<?php echo $selected1 ?>].selected = true;
ajout(document.forms[0].ville.options[<?php echo $selected1
?>].value,'categorie');
document.forms[0].categorie.options[<?php echo $selected2 ?>].selected =
true;

La fonction ajout() est lu dans la page maitre et est donc bien reconnue
(par exemple si je la place dans un onChange).
Par contre, pas moyen d'executer ces 3 lignes à l'apparition de l'iframe
: le js dans l'entete du fichier edition.php est zappé (j'ai testé en
faisant des erreurs de syntaxe, qui ne sont pas détectées) et si je
place le code js directement dans le body de edition.php, même problème
(le js n'est même pas lu par le navigateur puisqu'il ne détecte pas, là
non plus, l'erreur de syntaxe).

Alors comment puis-je executer ces 3 lignes de JS à l'affichage de cette
page en "pop-up" iframe ? Sachant, et c'est la le problème, que les
valeurs $selected1 et 2 sont données par edition.php.

Hum... si une personne a compris, bravo :) et merci.


C'est pas brillant niveau réponse :)
J'ai trouvé un truc bien moche : je mets un onLoad sur un gif
transparent de 1x1 (beurk, comme les vieux spacer immondes à la
Photoshop) et dans cet onLoad, je n'appelle pas ma fonction puisqu'elle
n'est pas vu (quelle soit dans le header ou dans le body) mais je mets
directement le code. Et ça marche.

Si vous avez une plus jolis solution...

Avatar
O.L.
Bonjour,

j'ouvre une page edition.php dans une page à l'aide d'une iframe, au moyen
de mootools.

La page qui apparait doit exécuter du javascript dès son lancement (cad son
apparition dans ce cas) :

document.forms[0].ville.options[<?php echo $selected1 ?>].selected = true;
ajout(document.forms[0].ville.options[<?php echo $selected1
?>].value,'categorie');
document.forms[0].categorie.options[<?php echo $selected2 ?>].selected =
true;

La fonction ajout() est lu dans la page maitre et est donc bien reconnue
(par exemple si je la place dans un onChange).
Par contre, pas moyen d'executer ces 3 lignes à l'apparition de l'iframe
le js dans l'entete du fichier edition.php est zappé (j'ai testé en
faisant des erreurs de syntaxe, qui ne sont pas détectées) et si je place

le code js directement dans le body de edition.php, même problème (le js
n'est même pas lu par le navigateur puisqu'il ne détecte pas, là non plus,
l'erreur de syntaxe).

Alors comment puis-je executer ces 3 lignes de JS à l'affichage de cette
page en "pop-up" iframe ? Sachant, et c'est la le problème, que les valeurs
$selected1 et 2 sont données par edition.php.

Hum... si une personne a compris, bravo :) et merci.


C'est pas brillant niveau réponse :)
J'ai trouvé un truc bien moche : je mets un onLoad sur un gif transparent de
1x1 (beurk, comme les vieux spacer immondes à la Photoshop) et dans cet
onLoad, je n'appelle pas ma fonction puisqu'elle n'est pas vu (quelle soit
dans le header ou dans le body) mais je mets directement le code. Et ça
marche.

Si vous avez une plus jolis solution...


Je serais curieux de voir comment tu ouvres ton IFRAME ? Toute cette
histoire de code JS qui ne s'exécute pas est quand même bizarre.

Sinon ton code m'intrigue un peu :
ajout(document.forms[0].ville.options[<?php echo $selected1
?>].value,'categorie');
Si c'est dans l'IFRAME que ça s'exécute, et que ajout() est définie


dans la fenêtre parente, je ne vois pas comment ce code peut marcher
... perso j'aurais mis :
window.parent.ajout(document.forms[0].ville.options[<?php echo
$selected1 ?>].value,'categorie');

Et pareil pour ton document.forms[0], es tu sûr qu'il est dans l'IFRAME
?

Et sinon, es tu sûr sûr sûr que l'affichage des erreurs JS est bien
activé ?

--
Olivier Ligny
www.virgal.net (Monde persistant)



Avatar
Olivier Masson

Je serais curieux de voir comment tu ouvres ton IFRAME ? Toute cette
histoire de code JS qui ne s'exécute pas est quand même bizarre.



J'utilise le plugin Smoothbox pour Mootools :
http://gueschla.com/2007/03/17/smoothbox-thickbox-pour-mootools/

Mais je changerai de solution je pense parce que l'iframe, c'est
vraiment puant.
Je parle pas niveau mise en page, puisque ça fait 30 ans (au moins !)
que je l'utilise plus, mais même en ajax, ça rend pas forcément les
choses plus simple, la preuve :)

Sinon ton code m'intrigue un peu :
ajout(document.forms[0].ville.options[<?php echo $selected1
?>].value,'categorie');
Si c'est dans l'IFRAME que ça s'exécute, et que ajout() est définie dans


la fenêtre parente, je ne vois pas comment ce code peut marcher ...
perso j'aurais mis :
window.parent.ajout(document.forms[0].ville.options[<?php echo
$selected1 ?>].value,'categorie');

Et pareil pour ton document.forms[0], es tu sûr qu'il est dans l'IFRAME ?



Oui, et ça fonctionne.
Je ne comprends pas non plus. Surtout pourquoi le JS placé dans l'iframe
n'est absolument pas utilisé.
Raisons pour lesquelles j'abandonnerai iframe (et donc smoothbox)
prochainement.
Mais ce sont mes premiers pas en ajax et comme je n'y comprends rien,
j'avance doucement.

Et sinon, es tu sûr sûr sûr que l'affichage des erreurs JS est bien
activé ?



Bien sûr, sinon j'aurais sacrément galéré.
Et j'utilise bcp le "code source généré" de WebDevelopper.
Il n'y a quel le DOM Inspector dont je n'arrive pas trop à me servir encore.



Avatar
ASM
Bonjour,

j'ouvre une page edition.php dans une page à l'aide d'une iframe,


Là ça veut rien dire ...

Tu veux sans doute dire que tu ouvres 'edition.php' dans une iframe ?

au moyen de mootools.


Aye !

La page qui apparait doit exécuter du javascript dès son lancement (cad
son apparition dans ce cas) :


et comment est-ce lancé ? (le code de lancement ?)

document.forms[0].ville.options[<?php echo $selected1 ?>].selected = true;


et pourquoi pas simplement :
document.forms[0].ville.selectedIndex = <?= $selected1 ?>;

ajout(document.forms[0].ville.options[<?php echo $selected1
?>].value,'categorie');
document.forms[0].categorie.options[<?php echo $selected2 ?>].selected =
true;

La fonction ajout() est lu dans la page maitre et est donc bien reconnue


Alors, avec le code que tu indiques,
ajout(blabla)
elle ne devrait pas être lancée (depuis l'iframe) !
Normalement la console de FF devrait dire que 'ajout' est inconnu
... sauf à ce que tu aies *aussi* une variable ou fonction 'ajout' dans
le JS de 'edition.php' ... ? !

Depuis 'edition.php' ouverte dans l'iframe, son JS devrait être :
parent.ajout(parent.monIframe.document.forms[0] ... blabla);
si l'iframe a un nom (ici : 'monIframe')


(par exemple si je la place dans un onChange).


et il est où ce onchange ? iframe ? page principale ?

Par contre, pas moyen d'executer ces 3 lignes à l'apparition de l'iframe
: le js dans l'entete du fichier edition.php est zappé (j'ai testé en
faisant des erreurs de syntaxe, qui ne sont pas détectées) et si je
place le code js directement dans le body de edition.php, même problème
(le js n'est même pas lu par le navigateur puisqu'il ne détecte pas, là
non plus, l'erreur de syntaxe).


mets-y au moins une simple alert('vu') pour voir à voir ...
(et au début du JS et à la fin)

FF t'ouvre le code-source de cet iframe ?
et tout y est OK ? le JS étoussa ...

Hum... si une personne a compris, bravo :) et merci.


Tout ça à vue de nez n'est que du bête JS qui n'a aucun besoin d'Ajax ni
de biblis ...


Depui une frame ou iframe :
- accéder à une fonction de la pagee principale :
parent.mafonction();
- accéder à une fonction de la page chargée dans le cadre :
mafonction();

Depuis la page principale :
- accéder à une fonction de la pagee principale :
mafonction();
- accéder à une fonction de la page chargée dans le cadre :
- si l'iframe a un nom :
parent.monIframe.mafonction();
- si elle n'a pas de nom :
parent.frames[0].mafonction();
- si l'iframe a un id :
document.getElementById('monIframe').mafonction();
... ne fonctionne pas ... !



--
Stephane Moriaux et son (moins) vieux Mac

Avatar
ASM
J'ai trouvé un truc bien moche : je mets un onLoad sur un gif
transparent de 1x1 (beurk, comme les vieux spacer immondes à la
Photoshop) et dans cet onLoad, je n'appelle pas ma fonction puisqu'elle
n'est pas vu (quelle soit dans le header ou dans le body)


Là y a un shisme !
Il n'y a aucune raison que ça ne fonctionne pas ... sauf à avoir fait
une erreur de code ... ? ! ? !

on peut voir le code de ce 'edition.php' ?
au moins un copié-collé du head

il doit il y avoir une coquille qui t'échappe.

--
Stephane Moriaux et son (moins) vieux Mac

Avatar
Olivier Masson

Tu veux sans doute dire que tu ouvres 'edition.php' dans une iframe ?



Oui

au moyen de mootools.


Aye !



C'était ça ou Flash (enfin, pas pour cette partie) :)

La page qui apparait doit exécuter du javascript dès son lancement
(cad son apparition dans ce cas) :


et comment est-ce lancé ? (le code de lancement ?)



Qd on clique sur le bouton 'édition', qui ouvre le iframe au centre de
l'écran par-dessus le contenu de la page.


et pourquoi pas simplement :
document.forms[0].ville.selectedIndex = <?= $selected1 ?>;



Parce qu'il faut activer les shorts tags, ce que je désactive dans ma
config php. J'avais lu que c'était pas bien et je crois que c'est
désactivé par défaut dans PHP5.

Alors, avec le code que tu indiques,
ajout(blabla)
elle ne devrait pas être lancée (depuis l'iframe) !


Je sais mais c'est comme ça.
Je répète (et j'ai testé, et je regarde constamment la console JS) que
ajout() n'est pas vu (donc erreur dans console) si je la mets dans
edition.php (!) mais elle est vue si je la place dans la page qui
appelle edition.php.
De toutes façons, on va pas se prendre la tête 10 heures là-dessus : il
semblerait que ce soit un bizarrerie de l'outil que j'utilise,
Smoothbox. Et, comme je le disais, je changerai de solution quand j'en
aurai le temps.

Par contre, pas moyen d'executer ces 3 lignes à l'apparition de
l'iframe : le js dans l'entete du fichier edition.php est zappé (j'ai
testé en faisant des erreurs de syntaxe, qui ne sont pas détectées) et
si je place le code js directement dans le body de edition.php, même
problème (le js n'est même pas lu par le navigateur puisqu'il ne
détecte pas, là non plus, l'erreur de syntaxe).


mets-y au moins une simple alert('vu') pour voir à voir ...
(et au début du JS et à la fin)



PArce que tu crois que je ne l'ai pas fait ?...

FF t'ouvre le code-source de cet iframe ?


Oui

et tout y est OK ? le JS étoussa ...



Oui

Tout ça à vue de nez n'est que du bête JS qui n'a aucun besoin d'Ajax ni
de biblis ...



Probablement, mais dans la précipitation (de l'urgence), j'ai foncé vers
un truc qui semble un peu moisi :)