11550 sujets

JavaScript, DOM et API Web HTML5

Modérateur
Bonjour à toutes et tous,

J'essaye de me faire un petit styleswitcher en javascript... Actuellement, çà fonctionne sur Firefox et Internet Explorer mais sur Opera, le comportement diffère...

Lorsque je clique sur le lien généré, le changement de style fonctionne dans un sens comme dans l'autre sur tous les navigateurs mais, en revanche, le lien se désactive sous Opera et je ne peux plus revenir en arrière... Mon plus gros problème est que je n'ai aucune erreur apparente et, malgré quelques essais, je n'arrive pas à supprimer ce blocage...

Quelqu'un peut-il me venir en aide ?

HTML (index.htm)

<!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>

	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	<title>Styleswitcher</title>
	<link rel="stylesheet" type="text/css" media="screen,projection" href="style.css" />
	<script type="text/javascript" src="styleswitcher.js"></script>

</head><body>

<p><a href="test.htm">Test</a></p>

</body></html>


HTML (test.htm)

<!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>

	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	<title>Styleswitcher (test)</title>
	<link rel="stylesheet" type="text/css" media="screen,projection" href="style.css" />
	<script type="text/javascript" src="styleswitcher.js"></script>

</head><body>

<p><a href="index.htm">Retour</a></p>

</body></html>


Javascript

var d = document;
var o = new Object;

o.Script =
{

	__Init: function()
	{
		o.StyleSwitcher.__Init();
	}

}

window.onload = o.Script.__Init;

o.Cookie =
{

	__Set: function( sName , sValue , oExpires , sPath , sDomain , bSecure )
	{
		var sCookie = sName + "=" + encodeURIComponent( sValue );

		if( oExpires )
			sCookie += "; expires=" + oExpires.toGMTString();

		if( sPath )
			sCookie += "; path=" + sPath;

		if( sDomain )
			sCookie += "; domain=" + sDomain;

		if( bSecure )
			sCookie += "; secure";

		d.cookie = sCookie;
	},

	__Get: function( sName )
	{
		var sRE = "(?:; )?" + sName + "=([^;]*);?";
		var oRE = new RegExp( sRE );

		if ( oRE.test( document.cookie ) )
			return decodeURIComponent( RegExp["$1"] );
		else
			return null;
	}

}

o.StyleSwitcher =
{

	__Init: function()
	{
		var oStyle = d.getElementsByTagName( 'link' )[0];
		var sCookie = o.Cookie.__Get( 'sStyle' );
		if( sCookie != null )
			oStyle.setAttribute( 'href' , sCookie );
		else
		{}

		var oP = d.createElement( 'p' );
		var oSwitch = d.createElement( 'a' );
		oSwitch.setAttribute( 'href' , '#' );
		var oTextSwitch = d.createTextNode( '' );
		oTextSwitch.data = 'Changer de style';
		var oBody = d.getElementsByTagName( 'body' )[0];

		oBody.appendChild( oP );
		oP.appendChild( oSwitch );
		oSwitch.appendChild( oTextSwitch );

		oSwitch.onclick = o.Methode.__Change;
	}
}

o.Methode =
{
	__Change: function()
	{
		var sStyle = o.Cookie.__Get( 'sStyle' );
		var oStyle = d.getElementsByTagName( 'link' )[0];

		if( sStyle == 'style.css' )
			oStyle.setAttribute( 'href' , 'style2.css' );
		else if( sStyle == 'style2.css' )
			oStyle.setAttribute( 'href' , 'style.css' );
		else
			oStyle.setAttribute( 'href' , 'style2.css' );

		o.Cookie.__Set( 'sStyle' , oStyle.getAttribute( 'href' ) );
		return false;
	}

}


Voilà, si quelqu'un trouve d'où vient le problème, je ne lui en serais que plus reconnaissant... Smiley cligne

Merci de votre attention ! Smiley lol
Modifié par koala64 (08 Jun 2006 - 07:58)
Modérateur
Hello,

Pardon d'insister mais y'a-t-il des problèmes avec la gestion des cookies sous Opera ?
A défaut d'avoir la solution, personne n'a ne serait-ce qu'une idée ?
Pourquoi ce blocage après le premier clic ??? Smiley ohwell

Si je ne trouve pas, je metterais un filtre pour supprimer cette fonctionnalité pour ceux qui se servent d'Opera mais bon, si je peux éviter...

PS: Le script ci-dessus peut-être simplifié mais même dans ce cas, le problème reste entier... Smiley decu