11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'aimerai savoir si il est possible de mettre 2 codes javascript dans la même page ce qui est mon cas . Mais naturellement ca ne marche pas sous IE .

Existe-t-il des solutions pour cela ?

Merci d'avance.


Smiley ohwell
Modérateur
Bonjour casey, Smiley smile

oui, c'est tout à fait possible, y compris sur IE mais peut-être qu'en nous montrant tes codes, nous pourrions te dire ce qui ne va pas. Smiley cligne
Merci de me répondre et je vous donne volontiers les codes :
En fait j'ai mis un javascript pour faire tourner un petit diaporama sur la page d'accueil, et je voulais avoir un fond transparent ce qui m'a causé bien des problèmes car cela fait 4 jours que je cherche. J'ai trouvé un script qui fonctionne et je l'ai collé dans la meme page que le script du diaporama mais je ne sais pas si c'est juste ! Merci d'avance !


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
	<title>Base Boutique</title>
	<meta http-equiv="imagetoolbar" content="no" />
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
	<meta http-equiv="Content-Style-Type" content="text/css" />
	<meta http-equiv="Content-Language" content="fr" />
	<script type="text/javascript" src="javascript/base.js"></script>
	<link rel="stylesheet" media="screen" type="text/css" title="Base" href="style/base.css" />
	
<!--[if lt IE 7.]>
<script type="text/javascript" src="javascript/base.js"></script>
<![endif]-->
	
</head>

<body onload="runSlideShow()">	

<div id="conteneur">

</body>




Smiley langue
Modérateur
Là, tu ne montres que les appels et non le code JS. Smiley cligne

Néanmoins, je vois que tu lances le diaporama comme ceci :
<body onload="runSlideShow()">...

et ton autre script doit certainement être lancé via un window.onload.

Si tel est le cas, il y a conflit donc je t'invite à consulter ce tuto pour résoudre ce problème.

PS : Pourquoi lances-tu deux fois ton script (dont une fois dans un commentaire conditionnel mal écrit -> mauvaise syntaxe) ?
Modifié par koala64 (16 Oct 2007 - 15:02)
Merci mais là je comprends plus rien j'essaie quand même de te donner le code javascript car j'ai un peu de difficultés à m'en sortir toute seule peut-être pourrais-tu m'aider à trouver la solution ?



/*cette page sers de script au site base boutique*/

// Set slideShowSpeed (milliseconds)
var slideShowSpeed = 3000

// Duration of crossfade (seconds)
var crossFadeDuration = 2

// Specify the image files
var Pic = new Array() // don't touch this
// to add more images, just continue
// the pattern, adding to the array below

Pic[0] = './photos/im1.png'
Pic[1] = './photos/im2.png'
Pic[2] = './photos/im3.png'
Pic[3] = './photos/im4.png'
Pic[4] = './photos/im5.png'
Pic[5] = './photos/im6.png'
Pic[6] = './photos/im7.png'
Pic[7] = './photos/im8.png'
Pic[8] = './photos/im9.png'
Pic[9] = './photos/im10.png'
Pic[10] = './photos/im11.png'
Pic[11] = './photos/im12.png'
Pic[12] = './photos/im13.png'
Pic[13] = './photos/im14.png'
Pic[14] = './photos/im16.png'







// =======================================
// Ne rien éditer au-dessous de cette ligne
// =======================================

var t
var j = 0
var p = Pic.length

var preLoad = new Array()
for (i = 0; i < p; i++){
preLoad[i] = new Image()
preLoad[i].src = Pic[i]
}

function runSlideShow(){
if (document.all){
document.images.SlideShow.style.filter="blendTrans(duration=2)"
document.images.SlideShow.style.filter="blendTrans(duration=crossFadeDuration)"
document.images.SlideShow.filters.blendTrans.Apply() 
}
document.images.SlideShow.src = preLoad[j].src
if (document.all){
document.images.SlideShow.filters.blendTrans.Play()
}
j = j + 1
if (j > (p-1)) j=0
t = setTimeout('runSlideShow()', slideShowSpeed)
}



/**********************************************************

**********************************************************/
if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) {
        window.attachEvent("onload", alphaBackgrounds);
       
        document.writeln('<style type="text/css">img { visibility:hidden; } </style>');
        window.attachEvent("onload", fnLoadPngs);
}
// Sleight Background
function alphaBackgrounds(){
        var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
        var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
        for (i=0; i<document.all.length; i++){
                var bg = document.all[i].currentStyle.backgroundImage;
                if (itsAllGood && bg){
                        if (bg.match(/\.png/i) != null){
                                var mypng = bg.substring(5,bg.length-2);
                                document.all[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+mypng+"', sizingMethod='scale')";
                                document.all[i].style.backgroundImage = "url('/assets/images/x.gif')";
                        }
                }
        }
}
// Sleight Simple
function fnLoadPngs()
{
        var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
        var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);

        for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--)
        {
                if (itsAllGood && img.src.match(/\.png$/i) != null)
                {
                        var src = img.src;
                        var div = document.createElement("DIV");
                        div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../image/fondtransp.png', sizing='scale')"
                        div.style.width = img.width + "px";
                        div.style.height = img.height + "px";
                        img.replaceNode(div);
                }
                img.style.visibility = "visible";
        }
}
Smiley smile [/i][/i][/i][/i][/i][/i][/i]
Merci de me le dire car j'y pense depuis longtemps la syntaxe n'est pas juste mais je ne sais pas comment on l'écrit ?
Modérateur
Pour ton commentaire conditionnel, tu trouveras la bonne syntaxe dans la FAQ (Il y a plein de réponses dans celle-ci Smiley cligne ).

Après, il te faut séparer les deux scripts et ne pas les mettre tous les deux dans le même fichier.

Pour ton diaporama, tu peux par exemple créer un fichier diaporama.js, y mettre son code JS puis faire l'appel comme suit :
<script type="text/javascript" src="diaporama.js"></script>


Pour le fond transparent et vu comment est monté le script que tu me montres, il faut le mettre en direct dans le head au sein d'un commentaire conditionnel. Ca devrait donner quelquechose comme çà :
<!--[if lt IE 7]>
<script type="text/javascript"><!--

window.attachEvent("onload", alphaBackgrounds);       
document.writeln('<style type="text/css">img { visibility:hidden; } </style>');
window.attachEvent("onload", fnLoadPngs);

// Sleight Background
function alphaBackgrounds()
{
        var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
        var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
        for (i=0; i<document.all.length; i++)
        {
                var bg = document.all[ i].currentStyle.backgroundImage;

                if (itsAllGood && bg)
                        if (bg.match(/\.png/i) != null)
                        {
                                var mypng = bg.substring(5,bg.length-2);

                                document.all[ i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+mypng+"', sizingMethod='scale')";
                                document.all[ i].style.backgroundImage = "url('/assets/images/x.gif')";
                        }
        }
}

// Sleight Simple
function fnLoadPngs()
{
        var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
        var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);

        for (var i = document.images.length - 1, img = null; (img = document.images[ i]); i--)
        {
                if (itsAllGood && img.src.match(/\.png$/i) != null)
                {
                        var src = img.src;
                        var div = document.createElement("DIV");

                        div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../image/fondtransp.png', sizing='scale')"
                        div.style.width = img.width + "px";
                        div.style.height = img.height + "px";
                        img.replaceNode(div);
                }
                img.style.visibility = "visible";
        }
}

//--></script>
<![ endif]-->
(Attention ! J'ai inséré des espaces sur les [ i] et le [ endif] pour que ça reste lisible sur le forum mais ils sont à supprimer) Smiley smile

PS : J'ai supprimé la détection du navigateur qui était faite au départ étant donné que dans le commentaire conditionnel, tu n'affecteras qu'IE.
J'ai tout mis comme tu m'as dit mais dans IE je ne vois pas les images de mon diaporama ca ne fonctionne pas. Peut-être c'est le <body onload="runSlideShow()"> qui n'est pas juste mais alors que faut-il mettre à la place ?

En tout cas merci pour la FAQ sur les commentaires ca m'est très utile et tout le reste aussi.

Smiley confus
Modifié par casey (16 Oct 2007 - 16:05)
Modérateur
/me n'a pas tout compris. Il manque des mots dans ta phrase. Smiley confuse

As-tu une page en ligne ? Ca permettrait d'aller plus vite. Smiley smile
Modifié par koala64 (16 Oct 2007 - 16:06)
Désolée pour les fautes mais c'est la fatigue ! Malheureusement, pour l'instant je travaille en local et je ne peux pas te donner le lien! Quels sont les conditions à connaître pour permettre aux deux navigateurs de charger un diaporama qui est un javascript et un autre script conditionnel comme celui que tu viens de me transmettre corrigé ?

Il y a sûrement quelque chose que j'ignore !

Smiley smile
Modifié par casey (16 Oct 2007 - 16:09)
Modérateur
Essaie d'enlever le onload="runSlideShow()" sur ton body et mets ceci dans ton fichier diaporama.js :
function connect(oElem, sEvType, fn, bCapture)
{
	return document.addEventListener ?
		oElem.addEventListener(sEvType, fn, bCapture):
		oElem.attachEvent ?
			oElem.attachEvent('on' + sEvType, fn):
			false;
}

connect(window, 'load', runSlideShow, false);
Pour charger plusieurs scripts à la fois, on évite généralement de lancer ces scripts sur le onload ou alors on englobe tout dans une fonction anonyme.
J'ai mis en place la procédure et j'ai supprimé le body onload et naturellement ca marche sous Mozilla mais pas sous IE Smiley bawling
Modérateur
ben... Ce qui serait bien, c'est d'activer les notifications d'erreur ainsi qu'un debugger sur IE. Ca t'en dirait plus. Smiley cligne

Cela dit, dès que tu en as la possibilité, n'hésite pas à mettre ta page en ligne parce que sans, il m'est très difficile de t'aider. Smiley sweatdrop