11548 sujets

JavaScript, DOM et API Web HTML5

Bonsoir

Sur mon site, dans le cas où le navigateur client ne gère pas le javascript, une redirection autamatique est opérée par la méthode qui suit :

<noscript>
<meta http-equiv="refresh" content="0;URL=http://..." />
</noscript>


Seulement le validateur Xhtml strict ne semble pas vraiment apprécier la présence de ces balises noscript dans le head...

Y'at-il un placement à adopter ? Si cette méthode est irrrémédiablement hors standard, quelqu'un aurait-il une autre solution au problème ?

Merci d'avance
Freedom
Modifié par Freedom_09 (02 Apr 2006 - 15:35)
L'élément noscript se place entre <body> et </body> et est un élément bloc. En aucun cas il devrait se trouver dans le head.
T'as qu'à faire autrement Smiley lol

No bon plus sérieusement, aucune.
Si tu utilises un langage côté serveur comme php, privilégie la redirection HTTP par header.
IL ne faut pas diaboliser le javascript non plus. IL est très pratique tant que le codeur reste du côté clair de la force.
C'est sûr qu'il est bien pratique à ses heures...

Bon j'ai remanié ma page d'une autre manière, si l'utilisateur n'a pas le javasscript, elle est lisible, et si le javascript est actif, il fait lui-même les modifications dans le style pour faire son travail...

Ainsi plus besoin de rediriger les utilisateurs sans javascript, et tout va bien dans le meilleur des mondes Smiley smile
QuentinC a écrit :
Si tu utilises un langage côté serveur comme php, privilégie la redirection HTTP par header.
Bonsoir,
Peux-tu préciser un peu ce que tu fais ?
(je dois moi-même m'occuper du problème sur mon site...)

Si j'ai bien tout compris, si tu utilises la redirection par header tu dois la faire avant tout autre affichage, donc tu ne peux pas utiliser la balise noscript...
J'ai bon ?
Alors, concrètement comment fais-tu ?
(je suis peut-être un peu fatigué, mais je ne vois pas bien comment faire... Smiley ohwell )
Attention à ne pas confondre la redirection côté client (javascript, meta refresh) et la redirection côté serveur (header).
Effectivement, si tu utilises header, tu ne peux pas envoyer de code HTML avant. Mais de toute façon, à quoi cela peut-il bien servir puisque tu sais que tu vas rediriger et donc l'utilisateur ne verra pas ta page ...

Sinon, l'instruction, c'est celle-ci :
header("Location:tapage.php");
QuentinC a écrit :
Mais de toute façon, à quoi cela peut-il bien servir puisque tu sais que tu vas rediriger et donc l'utilisateur ne verra pas ta page ...
Ben, c'est justement là qu'est le problème...
Comment fais-tu pour déterminer côté serveur (puisqu'on est dans le cas où on veux faire une redirection par header) qu'il faut rediriger ?

J'ai beau retourner le pbm dans tous les sens, je ne vois pas d'autre moyen que d'utiliser la balise noscript et une redirection meta (pas javascript puisque c'est justement le cas où javascript est désactivé que l'on veut traiter ici).
Oui mais le problème qui se pose alors c'est que <noscript> ne peut pas encadrer une meta de redirection, puisque justement <noscript> n'a pas sa place dans le <head>

La solution que j'ai trouvé n'est peut-être pas aplicable partout, mais elle marche plutot bien :
>> Créer la page pour être navigable sans javascript
>> Inclure dans le script javascript les modifications nécessaires au niveau des classes css pour que le script puisse fonctionner dans de bonnes conditions.

Celà me semble être la manière de procéder la plus logique : on fait une base visible par tous, et on l'améliore pour ceux qui le peuvent...
Freedom_09 a écrit :
Oui mais le problème qui se pose alors c'est que <noscript> ne peut pas encadrer une meta de redirection, puisque justement <noscript> n'a pas sa place dans le <head>
Exact, excuses j'avais oublié l'un des posts précédents Smiley cligne ...

Donc, la conclusion, c'est qu'on est mal Smiley decu parce qu'aucune bonne solution n'est applicable...

Faire une page "navigable sans javascript", comme tu dis, est une évidence bien sûr. Mais cela ne me "suffit" pas...
En effet, la partie javascript que j'utilise sur mes pages est le script niftycorners pour "arrondir les angles". Donc si on a javascript on a des beaux cadres, et sinon on a les cadres par défaut. C'est tout à fait fonctionnel mais juste moins beau...
Mais les règles css qui déterminent mes tailles, padding, etc... sont écrites en tenant compte des arrondis, et quand il n'y en a pas (javascript désactivé), ben c'est vraiment bizarre (certains cadres peuvent se chevaucher) !
Donc, ce que je pensais faire, c'est "donner" aux utilisateurs sans javascript une feuille de style légèrement modifiée (qques changements de taille de qques pixels suffisent).
Et là, ben, je m'aperçois qu'en gros, ce n'est pas possible Smiley sweatdrop
Dommage...
Justement Mpok, il est tout à fait possible, si ça tient à quelques pixels, de les faire ajuster par javascript.

Par exemple dans mon cas, le javascript commence par ceci :
with(document.getElementById('conteneur2'))
   {
   style.overflow="hidden";
   style.position="absolute";
   style.left="0";
   style.top="140px";
   style.width="450px";
   style.clip="rect(0px, 450px, 355px, 0px)";
   }


Sans détailler le but du script (rien à voir avec le tien ^^) tu peux voir que conteneur2 est complètement modifié par javascript : dans le css, il ne faisait que 430px et admettais un overflow auto. Si javascript est activé, ces données ne sont plus nécessaires (et sont même génantes pour le script), donc javascript les ajuste lui-même Smiley lol

Je ne vois pas trop ce qui pourrait t'empecher d'utilsier une méthode similaire : tu ajustes tes cadres pour que tout aille bien en l'absence de javascript, et tu réajustes tout pour ton script de bords arrondis. non ?
Smiley eek Mais c'est bien sûr !! Smiley lol

Je ne sais pas pourquoi je m'acharnais à vouloir faire l'inverse ! (une fois qu'on est parti sur un raisonnement, c'est pas facile de changer son fusil d'épaule...)
J'étais parti sur l'idée de fournir une feuille de style "dégradée" aux utilisateurs sans javascript, d'où le pbm.
Or, ce qu'il faut faire (ça semble évident maintenant que tu m'as mis le doigt dessus Smiley cligne ), c'est fournir une feuille de style "améliorée" aux utilisateurs avec javascript !! Smiley biggrin

Merci pour cette idée (simple, mais qui me paraît du coup géniale !)

(bon, reste à tester concrètement, comme je n'ai pas énormément de cadres et de modifs à appliquer en javascript, ça ne devrait pas trop ralentir le chargement de la page, donc a priori ce sera ok).

(remarque qui n'a rien à voir, quoique : 100ème post, un pbm résolu, le jour de mon anniversaire, je vais me coucher content Smiley smile )
Heureux de t'avoir aiguillé Smiley smile

J'avais d'ailleurs lu récement un article qui traitait de la différence entre dégradation progressive et (terme inexact mais je ne retrouve plus) "amélioration progressive". Même si la différence entre les notions semblait simple, c'est toujours enrichissant de voir un exemple dans lequel l'un rend certaines choses possibles et pas l'autre...
J'ai la solution de la mort qui tue pour faire une redirection sans js et sans meta : un simple lien ...
QuentinC :

Ence qui me concerne j'ai une balise noscript qui affiche un lien en rouge en haut de page : /javascript est désactivé sur votre ordinateur, pour assurer un afichage parfaitement adapté du site, merci de cliquer ici...\

Mais comme dans tous les tests que j'ai pu faire, la solution trouvée précédement fonctionne, finalement j'hésite à laisser ce lien...
Ne sois pas trop agressif quand même. Certains n'ont pas js d'activé mais ils ne savent pas pourquoi ou bien ils ne peuvent pas le réactiver.

Un message discret suffira pour les pages où le js est absolument indispensable.
oui en fait je cherch une phrase mieux tournée...

Peut-être une redirection vers une page d'aide ? (mais ça fait beaucoup de pages d'aide...)

du style : Javascript ne semble pas être activé sur votre ordinateur, si ceci est du à un choix ou une obligation, merci de clique ici, dans le cas contraire, n'hésitez pas à vous informer sur cette page.