[JavaScript] Problème avec Firefox

Résolu/Fermé
wido22 Messages postés 19 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 1 juin 2009 - 23 mai 2009 à 14:59
wido22 Messages postés 19 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 1 juin 2009 - 28 mai 2009 à 07:07
Bonjour,
voila, je suis en train de créer mon propre site pour héberger un jeu flash que je viens de créer. Pour cela j'utilise du JavaScript avec Ajax et php.

Mon problème vient du faite que lorsque j'ouvre mon site avec Firefox, et que je clic sur "Game", le jeu flash n'apparait pas, alors qu'avec IE, ça s'affiche correctement.

Techniquement lorsque l'on clic sur "Game", cela appel une fonction XMLHttpRequest(); et une page php echo tout le code html pour l'insertion d'un flash. Ensuite une autre fonction créer une fenêtre et affiche le contenu de la réponse dans cette fenêtre.

Je ne pense pas que le problème vienne du code html pour l'insertion d'un flash car si je demande directement la page php sous Firefox, le jeu s'affiche corectement.

Vous pouvez voir mon site sur : http://widos.game.free.fr/
(le site est encore en test, donc pour l'instant, le design, c'est pas encore ça :p )

Code HTML:


<li id="bt_jeu" onmouseover="selec('jeu');" onclick="choix('bt_jeu');" >Game</li>



Code JavaScript:

var affichage;

function choix(elmt){
	switch(elmt)
	{
		case "bt_news":
			bouton = document.getElementById('bt_news');
			bouton.style.display = "none";
			nbFenetre = "news";
			request(readData,100,200,500,200,"news.php");
		break;
		
		case "bt_jeu":
			bouton = document.getElementById('bt_jeu');
			bouton.style.display = "none";
			nbFenetre = "jeu1";
			request(readData,150,230,716,500,"jeu1.php");
		break;
                
                (etc ....)


	}
}

function request(callback,left,top,width,height,page) {
	if (xhr && xhr.readyState != 0) {
		alert("Error 1");
		return;
	}
	
	var xhr = getXMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
			callback(xhr.responseText,left,top,width,height);
		}
	};
	
	var message = "";
	
	xhr.open("POST", page, true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send("message="+message);
}

function readData(sData,left,top,width,height) {
	if(sData==33)
	{
		affichage="<div id='logout' ><p>You are now logout.</p><p>This window will close automatically in 3 seconds.</p></div>";
		setTimeout('connecter(0)',3000);
	}
	else
	{
		affichage=sData;
	}
	creer_fenetre(left,top,width,height);
}

function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Error 2");
		return null;
	}
	
	return xhr;
}

function creer_fenetre(left,top,width,height) {
    var fenetre = document.createElement("div");
    fenetre.className="fenetre";
    fenetre.style.left=left+"px";
    fenetre.style.top=top+"px";
    fenetre.style.width=width+"px";
    fenetre.style.height=height+"px";
    addEvent(fenetre,"mousedown",function (){premier_plan(fenetre)});
	
    var haut = document.createElement("div");
    haut.className="haut";
    addEvent(haut,"mousedown",function (event){commencer_deplacement(event,fenetre)});
    addEvent(haut,"mouseup",arreter_deplacement);
    var haut_gauche = document.createElement("div");
    haut_gauche.className="haut_gauche";
    var haut_droite = document.createElement("div");
    haut_droite.className="haut_droite";
    var haut_centre = document.createElement("div");
    haut_centre.className="haut_centre";
	haut_centre.innerHTML="<div class='close' onclick=\"fermer('"+nbFenetre+"');\" ></div>";
    haut.appendChild(haut_gauche);
    haut.appendChild(haut_droite);
    haut.appendChild(haut_centre);
    fenetre.appendChild(haut);
	
    var milieu = document.createElement("div");
    milieu.className="milieu";
    var milieu_gauche = document.createElement("div");
    milieu_gauche.className="milieu_gauche";
    var milieu_droite = document.createElement("div");
    milieu_droite.className="milieu_droite";
    var milieu_centre = document.createElement("div");
    milieu_centre.className="milieu_centre";

	milieu_centre.innerHTML=affichage;
	affichage="";

    milieu.appendChild(milieu_gauche);
    milieu.appendChild(milieu_droite);
    milieu.appendChild(milieu_centre);
    fenetre.appendChild(milieu);
   
    var bas = document.createElement("div");
    bas.className="bas";
    var bas_gauche = document.createElement("div");
    bas_gauche.className="bas_gauche";
    var bas_droite = document.createElement("div");
    bas_droite.className="bas_droite";
    var bas_centre = document.createElement("div");
    bas_centre.className="bas_centre";
    bas.appendChild(bas_gauche);
    bas.appendChild(bas_droite);
    bas.appendChild(bas_centre);
    fenetre.appendChild(bas);
 
    premier_plan(fenetre); //Met au premier plan la fenêtre
    document.body.appendChild(fenetre);
}

etc...


Code PHP: (merci dreamweaver :p )

<?php
echo'

<div id="jeu1">
<script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="700" height="500" id="FlashID" tabindex="200" title="ReflexionBeta0.9">
  <param name="movie" value="Jeu/ReflexionBeta0.9.swf" />
  <param name="quality" value="high" />
  <param name="wmode" value="opaque" />
  <param name="swfversion" value="6.0.65.0" />
  <!-- Cette balise <param> invite les utilisateurs de Flash Player en version 6.0 r65 et ultérieure à télécharger la version la plus récente de Flash Player. Supprimez-la si vous ne voulez pas que cette invite soit visible. -->
  <param name="expressinstall" value="Scripts/expressInstall.swf" />
  <!-- La balise <object> suivante est destinée aux navigateurs autres qu\'IE. Supprimez-la d\'IE à l\'aide d\'IECC. -->
  <!--[if !IE]>-->
  <object type="application/x-shockwave-flash" data="Jeu/ReflexionBeta0.9.swf" width="700" height="500">
    <!--<![endif]-->
    <param name="quality" value="high" />
    <param name="wmode" value="opaque" />
    <param name="swfversion" value="6.0.65.0" />
    <param name="expressinstall" value="Scripts/expressInstall.swf" />
    <!-- Le navigateur affichera le contenu alternatif suivant pour les utilisateurs d\'un lecteur Flash de version 6.0 ou de versions plus anciennes. -->
    <div>
      <h4>Le contenu de cette page n&eacute;cessite une version plus r&eacute;cente d’Adobe Flash Player.</h4>
      <p><a href="https://get.adobe.com/flashplayer/"><img src="https://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Obtenir le lecteur Adobe Flash" width="112" height="33" /></a></p>
    </div>
    <!--[if !IE]>-->
  </object>
  <!--<![endif]-->
</object>
<script type="text/javascript">
<!--
swfobject.registerObject("FlashID");
//-->
</script>
<div>';

?>



Merci d'avance pour vos réponse.
A voir également:

3 réponses

wido22 Messages postés 19 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 1 juin 2009 31
28 mai 2009 à 07:07
Je me répond à moi même car j'ai trouver la solution.

Il fallait simplement ajouter dans le script JavaScript, une détection du navigateur, et ainsi changer la demande par XMLHttpRequest() pour recevoir un code différent pour les autres navigateur qu'IE.
2
wido22 Messages postés 19 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 1 juin 2009 31
24 mai 2009 à 06:58
Enfaite maintenant, sous Firefox, le flash apparait puis disparait tout de suite, je ne comprend vraiment pas pourquoi :/
0
wido22 Messages postés 19 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 1 juin 2009 31
28 mai 2009 à 04:23
Je me répond à moi même car j'ai trouvé la solution.

Il fallait juste que dans mon script, je fasse la détection du navigateur utiliser par :
if(navigator.appName == "Microsoft Internet Explorer")
	{
		request(readData,150,230,716,500,"jeu1.php",0);
	}
	else
	{
		request(readData,150,230,716,500,"jeu1.php",1);
	}


Et ensuite envoyer une requête avec un paramètre extra en plus pour que php sache de quel navigateur il s'agit, afin d'envoyer le bon code html.

("ext", c'est mon paramètre en extra )

Code PHP:

if($_POST['ext']==0)
{
	echo'
	<div id="jeu1">
	<script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
	<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="700" height="500" id="FlashID" tabindex="200" title="ReflexionBeta0.9">
	  <param name="movie" value="Jeu/ReflexionBeta0.9.swf" />
	  <param name="quality" value="high" />
	  <param name="wmode" value="opaque" />
	  <param name="swfversion" value="6.0.65.0" />
	  <!-- Cette balise <param> invite les utilisateurs de Flash Player en version 6.0 r65 et ultérieure à télécharger la version la plus récente de Flash Player. Supprimez-la si vous ne voulez pas que cette invite soit visible. -->
	  <param name="expressinstall" value="Scripts/expressInstall.swf" />
	  <!-- La balise <object> suivante est destinée aux navigateurs autres qu\'IE. Supprimez-la d\'IE à l\'aide d\'IECC. -->
	  <!--[if !IE]>-->
	  <object type="application/x-shockwave-flash" data="Jeu/ReflexionBeta0.9.swf" width="700" height="500">
		<!--<![endif]-->
		<param name="quality" value="high" />
		<param name="wmode" value="opaque" />
		<param name="swfversion" value="6.0.65.0" />
		<param name="expressinstall" value="Scripts/expressInstall.swf" />
		<!-- Le navigateur affichera le contenu alternatif suivant pour les utilisateurs d\'un lecteur Flash de version 6.0 ou de versions plus anciennes. -->
		<div>
		  <h4>Le contenu de cette page n&eacute;cessite une version plus r&eacute;cente d’Adobe Flash Player.</h4>
		  <p><a href="https://get.adobe.com/flashplayer/"><img src="https://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Obtenir le lecteur Adobe Flash" width="112" height="33" /></a></p>
		</div>
		<!--[if !IE]>-->
	  </object>
	  <!--<![endif]-->
	</object>
	<script type="text/javascript">
	<!--
	swfobject.registerObject("FlashID");
	//-->
	</script>
	<div>';
}
else
{
	echo'
	<div id="jeu1">
	<script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
	  <!--[if !IE]>-->
	  <object type="application/x-shockwave-flash" data="Jeu/ReflexionBeta0.9.swf" width="700" height="500">
		<!--<![endif]-->
		<param name="quality" value="high" />
		<param name="wmode" value="opaque" />
		<param name="swfversion" value="6.0.65.0" />
		<param name="expressinstall" value="Scripts/expressInstall.swf" />
		<!-- Le navigateur affichera le contenu alternatif suivant pour les utilisateurs d\'un lecteur Flash de version 6.0 ou de versions plus anciennes. -->
		<div>
		  <h4>Le contenu de cette page n&eacute;cessite une version plus r&eacute;cente d’Adobe Flash Player.</h4>
		  <p><a href="https://get.adobe.com/flashplayer/"><img src="https://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Obtenir le lecteur Adobe Flash" width="112" height="33" /></a></p>
		</div>
		<!--[if !IE]>-->
	  </object>
	<script type="text/javascript">
	<!--
	swfobject.registerObject("FlashID");
	//-->
	</script>
	<div>';
}

?>
0