iFrame <-> parent - getElementById('').innerHTML et PHP
Bonjour à tous,
Je cherche à résoudre un problème de ciblage d'une fonction javascript qui pourra peut-être paraître anodin aux yeux de certains mais moi j'y arrive pas :calim2: ...
1. J'ai une page HTML "index.html" dans laquelle se situe un texte à modifier qui fait office de Titre pour l'iFrame qu'elle contient :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <head>
<script language="javascript" src="show_layer.js"></script>
<style type="text/css">
<!--
function changeText(leNom){
document.getElementById('titre').innerHTML=leNom;
}
//-->
</script>
</head>
<body>
<strong><span class="century" id="titre">HOME</span></strong><br />
<iframe src="home.php" width="1000" height="558" scrolling="Auto" frameborder="0" name="Contenu" id="Contenu"> </iframe><br />
</body> |
2. Mon iFrame contient en fait une galerie d'aperçu en PHP "home.php" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php
$path = "../".basename(dirname(__FILE__));
$dir_handle = @opendir($path) or die("Unable to open $path");
list_dir($dir_handle,$path);
function list_dir($dir_handle,$path) {
while (false !== ($file = readdir($dir_handle))) {
$dir =$path.'/'.$file;
if(is_dir($dir) && $file != '.' && $file !='..' )
{
$handle = @opendir($dir) or die("undable to open file $file");
list_dir($handle, $dir);
}elseif($file != '.' && $file !='..')
{
if (substr($file,-5)=="1.jpg") {
$noum = substr($path,11); //ici $noum devient en fait le nom de la série dont on va afficher l'image 1.jpg
echo "<a href='#' onclick='javascript:parent.changeText($noum);return false;'>$noum</a>";// c'est ça ???
echo "<a href='#' javascript:parent.document.getElementById('titre').innerHTML='lala');>$noum</a>";// ou bien ça ???
echo "<td><a href='$path/serie.php'><img src='$path/$file' height=20%></a></td>";// là j'affiche l'aperçu avec comme lien la série en question
}
}
}
closedir($dir_handle);
}
?> |
NB : j'ai dans ma page index.html une animation flash dans laquelle se trouve un bouton avec le code suivant :
Code:
1 2 3
| on (release) {
_root.getURL("javascript:changeText('Texte d'exemple')");
} |
... et celà fonctionne
Par contre à partir de l'iFrame ça ne fonctionne pas... avez vous une idée de mon erreur ? :oops:
merci d'avance :P
Kot kot kotkot kot kot koooooodaaaaaaaaak
Bonjour,
Le problème arrive fréquemment en passant par PhP et en jouant avec des fonction Javascript. Votre echo commence par des guillements (" ") puis dans votre HTML, vous devez également préciser des chaines de caractères. Vu que les guillements sont déjà ouverts, vous prenez les quotes (' '). Seulement, dans vos quotes, vous devez mettre des chaines de caratères pour le Javascript car son paramètre est une chaine de caractères. Problème. Les guillemets et les quotes sont tous les deux ouverts. Si vous en utilisez un ou l'autre pour votre paramètre, cela va fermer soit votre HTML, soit votre echo. :aie:
Le backslash (\) permet d'échapper le caractère qui le suit. Ca veut dire que lors du parsing PhP, le " qui suit le \ ne sera pas pris comme la fin du echo mais comme un caractère normal. Ce caractère normal sera alors considéré comme le début d'une chaine de caractères par le parseur HTML.
Notez que c'est bien " ' \" ' " et non " ' \' ' " sinon, lors du parsing HTML, il y aura fermeture du HTML alors que vous vouliez en fait ouvrir le paramètre Javascript. Pensez à bien alterner. ;)