11548 sujets

JavaScript, DOM et API Web HTML5

Salut,
j'aimerais savoir si il était possible de créer une redirection en javascript en fonction du navigateur de l'internaute.
Je m 'éxplique j'ai un site (dont je ne donnerais pas l'adresse vu que ceci est assimilé à de la publicité) dont l'ancienne version marchait tres bien sous firefox opera et i.e, mais la nouvelle version de ce site
integrant une iframe ne s'affiche pas correctement sur ie et opera. J'aurais donc voulu un script qui en fonction du navigateur redirige vers la nouvelle version ou vers l'ancienne.
Me suis je bien fait comprendre Smiley cligne
Merci a tous ceux qui répondront.
salut
Modifié par djimdjamoul (26 Jan 2007 - 19:41)
Bonjour,

La solution n'est pas une redirection (inutile) en javascript (problème d'accessibilité) en fonction du navigateur (problèmes de fiabilité).

La solution est simplement de corriger le code HTML CSS concerné, qui n'a aucune raison de poser un problème à ces navigateurs Smiley cligne
Je rajouterais qu'en plus, vouloir rediriger les utilisateurs ne possédant pas le "bon" navigateur vers un "ancien site" n'est pas très malin :
côté utilisateur 1. l'ancien site n'est pas mis à jour, 2. les utilisateurs n'ont pas les bonnes infos, et finalement conséquence 3. au-revoir les utilisateurs.
et côté webmaster 1. deux sites à mettre à jour = 2. plus de boulot = conséquence 3. je ne mets qu'un seul des deux sites à jour parce que ça me fait ch*** de faire deux fois le même boulot

Laurent Denis te donne certainement la meilleure solution qui soit, et de loin : corriger le problème. D'autant plus que tu es au bon endroit pour obtenir l'aide des grosses têtes du CSS.
C'est bon j'ai trouvé un script :
 <script language="javascript">
redirection1="index3.php";

redirection3="index2.php";
var NomDuNavigateur = navigator.appName;

if(NomDuNavigateur == "Microsoft Internet Explorer")
{
document.location = redirection1;
}

else if(NomDuNavigateur == "Netscape")
{
document.location = redirection3;
}
else
document.location = "index3.php";
</script>
Dommage, tu n'as même pas suivi nos recommandations avant d'utiliser un tel script.
Tu vas perdre des visiteurs... mais bon nous on s'en fout c'est ton problème.
Administrateur
Je serais curieux de savoir de quand date ce fabuleux script (à l'époque, mais horrible en 2007) ... Quelque chose comme 1998? Dans la datation des ères Internet, c'est équivalent à avant la disparition des dinosaures alors cette chose risque d'être un peu dépassée Smiley murf (en fait c'est la tentative même de croire que l'on peut encore détecter le navigateur qui est vouée à l'échec mais bon ça, je crois que ça a pas été entendu/compris/pris en compte)
En tant que néophyte n00b sur le sujet de l'analyse organique d'un projet de type site internet, je m'interroge tout de même sur vos réponses au nom de quelques réflexes personnels dans l'analyse organique d'un projet de système d'information classique :

1/ Si l'analyse du projet fait apparaître une fonction donnée dont le codage dépend fortement de conditions environnementales bien distinguables et en nombre fini et connu d'avance,

Il n'y a à mon sens pas lieu de chercher à créer UNE fonction UNIQUE qui traite tous les cas possibles à grand coups de switch case et autres if then else imbriqués. Cela rend le code totalement illisible et particulièrement compliqué à reprendre le jour où une conditions environnementale supplémentaire apparaît.

Il ne me semble donc pas impertinent de chercher à créer autant de fonctions que de conditions environnementales et de faire un chapeau très simple en forme de switch case.

2/ Je comprends très bien l'objection faite relativement aux problèmes de mise à jour de la fonctionnalité elle-même en soi. Cette méthode accroît significativement les risques de niveaux différents de mise à jour des multiples occurrences de la fonction mais ceci peut être facilement contourné par :

- L'usage de systèmes de contrôle de sources (SCCS)
- Une analyse organique déportant le maximum de données et paramètes dans une base de données indépendante
- L'usage de logiciels générateurs de sources type Yacc.

3/ Cette question me préoccupe moi aussi relativement à un problème autre que celui de djimdjamoul mais assez équivalent :
Je projette un site multi-lingues (2 aujourd'hui, 3 dans un futur proche, 4 peut-être un jour ou jamais)
Que dois-je faire ? Et bien je crois qu'en fonction de l'analyse organique de mes pages, j'opterai, pour certaines d'entre-elles pour une solution analogue à celle de djimdjamoul basée sur la détection non pas du navigateur mais de la langue.

4/ Relativement à la sélection en fonction du navigateur, j'ai bien évidemment fait le choix du standard car je n'ai pas trop les moyens commodes de valider mon code sur tous le types de browser existants.
Mais il faut reconnaître que on peut vouloir au contraire, relativement à une fonction particulière, chercher à utiliser au mieux les spécificités d'un navigateur particulier.
Vous allez me répondre que ceux qui désirent cela n'ont rien à faire sur un forum dédié aux standards, c'est un point de vue.
A mon avis, ce qui tue les standards c'est le dogmatisme. Un standard à mes yeux cela me rend service. C'est un plus pour moi à cause de mes contraintes. Maintenant si cela devient un dogme, cela me contraindra à la longue plus que cela ne me servira.
Restons donc ouverts si on tient aux standards pour leur utilité.

Si je prends l'exemple simple (iste) d'une analyse ayant justifié une présentation faisant fréquemment appel à des textes clignottants.
<blink> ne fonctionnera que sur FireFox. D'accord. Il faut donc le faire puisque l'analyse l'exige. L'anaylse a fait la pondération entre les standards et mes besoins particuliers. Mais alors j'aurai besoin d'un code très différent pour IE6 et probablement de nature à justifier un choix type djimdjamoul.

Enfin... ceci est... mon opinion !
Provide TOOLS ! NOT POLICY !
aCOSwt a écrit :
Et bien je crois qu'en fonction de l'analyse organique de mes pages, j'opterai, pour certaines d'entre-elles pour une solution analogue à celle de djimdjamoul basée sur la détection non pas du navigateur mais de la langue.


La détection de la préférence de langue éventuellement émise par le navigateur (en-tête HTTP) est normalisée. La question est radicalement différente...

aCOSwt a écrit :

Mais il faut reconnaître que on peut vouloir au contraire, relativement à une fonction particulière, chercher à utiliser au mieux les spécificités d'un navigateur particulier.
Vous allez me répondre que ceux qui désirent cela n'ont rien à faire sur un forum dédié aux standards, c'est un point de vue.


Cela ne pose aucun problème du point de vue "standard" dès lors que la solution utilisée est robuste et accessible. Ce qui n'est pas le cas ici.

aCOSwt a écrit :

A mon avis, ce qui tue les standards c'est le dogmatisme.


Lire Conformité et surqualité... Mais, ici, encore une fois, il ne s'agit pas de questions de conformité. Simplement du fait que ces scripts de détection du navigateur ont depuis longtemps fait la preuve de leur totale inefficacité Smiley rolleyes

(La solution robuste et désormais classique consistant à ne pas tester l'identité du navigateur, mais la disponibilité de la fonction requise...)
Modifié par Laurent Denis (28 Jan 2007 - 11:44)
Modérateur
Salut,

aCOSwt a écrit :
(...) de conditions environnementales bien distinguables et en nombre fini et connu d'avance, (...)
Comment cela est-il possible ? As-tu une liste ? Et où faut-il s'inscrire lorsqu'on crée un nouveau support ? Smiley smile

Le seul cas où cette approche est concevable serait pour un site à auditorat limité (réseau interne à une entreprise avec contrainte du support par exemple). Ce n'est pas le cas sur le web. Par ailleurs, ça supposerait des risques de modification du script à chaque évolution du support utilisé. Si on teste la disponibilité de la fonction, en revanche, on a, au pire, un bout de code qui ne servirait à rien mais ça marcherait quand même.
Laurent Denis a écrit :

Lire Conformité et surqualité


Merci pour le lien, j'ai retenu : "vous n’avez pas le droit de ne pas vous poser la question."
Il DOIT être effectivement d'évidence que seule une analyse détaillée à autorité pour bypasser un standard.

Laurent Denis a écrit :

(La solution robuste et désormais classique consistant à ne pas tester l'identité du navigateur, mais la disponibilité de la fonction requise...)


+1 ! C'est effectivement la démarche la plus intelligente
Et j'y adhère à 101%... en théorie.

Dans la pratique d'une réalisation collaborative sans liens de subordination entre des collaborateurs, chaque collaborateur réalise en fonction de ses moyens techniques toujours limités si l'objet de la réalisation n'est pas informatique.
La contribution de chacun est excessivement hétéroclite. Et l'intérêt de la teneur de cette contribution dépasse de beaucoup la question de savoir quelle fonction utilisée est ou non disponible sur tel ou tel navigateur.
Si de plus la somme de travail de compilation est telle qu'il est impossible de rentrer dans le code de chacun, il peut être éminement préférable de restreindre l'affichage de la page aux seuls browsers exactement identiques à celui sur lequel la contribution a été validée.

Je reconnais que c'est un peu bourrain mais... c'est à mon sens plus secure.

Merci Laurent Denis pour tes observations.
koala64 a écrit :
Salut,
Comment cela est-il possible ? As-tu une liste ? Et où faut-il s'inscrire lorsqu'on crée un nouveau support ? Smiley smile
Le seul cas où cette approche est concevable serait pour un site à auditorat limité (réseau interne à une entreprise avec contrainte du support par exemple). Ce n'est pas le cas sur le web. Par ailleurs, ça supposerait des risques de modification du script à chaque évolution du support utilisé. Si on teste la disponibilité de la fonction, en revanche, on a, au pire, un bout de code qui ne servirait à rien mais ça marcherait quand même.


Je reconnais que mon approche du codage est conditionnée par une survalorisation de la phase de validation, survalorisation commandée par des exigences réglementaires (FDA).
- Dans ce contexte, un bout de code qui ne sert à rien est strictement prohibé.
- Transposé dans ce contexte, le plan de validation d'un code bourré de conditions relatives à la disponibilité de fonctions unitaires est un véritable casse tête comparativement à un code ciblé / dédié globalement.

Je m'accorde volontiers au fait que l'usage de standards / best practices, sécurise significativement la phase de codage mais ce serait aussi un tort que de s'imaginer que cela dispense d'une phase de validation.

Tu as bien cerné le prix à payer : où faut-il s'inscrire quand on crée un nouveau support. C'est vrai que le code aura toujours un temps de retard par rapport aux offres de clients.
Mais ce défaut est le propre de TOUTE application client / serveur si je ne m'abuse.
Modifié par aCOSwt (28 Jan 2007 - 12:46)
Modérateur
aCOSwt a écrit :
- Dans ce contexte, un bout de code qui ne sert à rien est strictement prohibé.
J'entendais par là un test qui devient inutile mais qui n'invalide en rien la démarche.

a écrit :
Je m'accorde volontiers au fait que l'usage de standards / best practices, sécurise significativement la phase de codage mais ce serait aussi un tort que de s'imaginer que cela dispense d'une phase de validation.
Je ne pense pas qu'on ait exprimé cela...

a écrit :
Tu as bien cerné le prix à payer : où faut-il s'inscrire quand on crée un nouveau support. C'est vrai que le code aura toujours un temps de retard par rapport aux offres de clients.
Mais ce défaut est le propre de TOUTE application client / serveur si je ne m'abuse.
En attendant, je n'enverrais pas de code erroné sur une version incompatible. Je fonctionne en tout ou rien, ce qui n'est pas la cas de ta démarche qui est susceptible de comporter de nombreuses failles à chaque amélioration du support.

a écrit :
Dans la pratique d'une réalisation collaborative sans liens de subordination entre des collaborateurs, chaque collaborateur réalise en fonction de ses moyens techniques toujours limités si l'objet de la réalisation n'est pas informatique.
La contribution de chacun est excessivement hétéroclite. Et l'intérêt de la teneur de cette contribution dépasse de beaucoup la question de savoir quelle fonction utilisée est ou non disponible sur tel ou tel navigateur.
Si de plus la somme de travail de compilation est telle qu'il est impossible de rentrer dans le code de chacun, il peut être éminement préférable de restreindre l'affichage de la page aux seuls browsers exactement identiques à celui sur lequel la contribution a été validée.

Je reconnais que c'est un peu bourrain mais... c'est à mon sens plus secure.
Non, ça l'est nettement moins. Il n'est pas seulement question des capacités de chacun; tu fais rentrer des paramètres que tu ne peux contrôler (l'évolution des supports), ce qui te donne toujours un temps de retard. Ton code peut-être deux à trois fois plus lourd étant donné que même si une méthode est "cross-browser", ce paramètre arrive après la détection du navigateur, ce qui t'oblige à générer du code supplémentaire (le truc strictement prohibé dont tu m'as parlé tout à l'heure).

Ce qui m'embête le plus, c'est qu'un débutant lisant ces lignes ne comprendra pas mot de ce que l'on dit mais sera susceptible de pencher pour cette facilité "apparente" qu'est la détection de navigateur... qui est fort "trompeuse" et qui même avec le plus grand soin apporté ne sera jamais sûre.

Quoiqu'il en soit, dans les deux cas, notre approche fonctionne ou au pire ne transmet rien. Si elle ne transmet rien, l'erreur est facilement repérable puisqu'elle n'invalide pas les méthodes qui ont lieu en amont.
La détection de navigateur, quant à elle, est située en amont, ce qui fait que soit ça fonctionne soit ça envoie une masse de code erroné à tout un support... sans compter que la recherche de l'erreur sera bien plus lourde pour ne pas dire difficile car non parlante. Rien n'indiquera que le problème vient de cette détection et il faudra une fois de plus démultiplier le code lorsque tu l'auras repéré.

Quelqu'un qui joue avec la détection de navigateur sur le net aurait, aujourd'hui, des milliers de support à prendre en charge, ce qui rend cette approche complètement farfelue. Au temps des dinosaures où deux monstres se battaient en duel pour assurer leur suprématie, c'était concevable mais cette époque est révolue depuis belle lurette...
Tu marques le point koala64 !

Je reconnais que la logique d'une telle démarche imposerait que l'on considère non pas la seule notion de type de navigateur mais aussi l'OS de la machine, les nombres de couleurs dispo, les fontes dispo... et que, même ainsi, l'on ne saura jamais être exhaustif quant aux conditions environementales.

Alors qu'en revanche, le test de la prise en compte d'une fonction / méthode... donne un compte rendu fiable / factuel, binaire et synchrone avec le besoin que l'on en a.

C'est vrai que je suis tombé dans le panneau de la facilité apparente que tu mentionnes... La faute... aux sites non Alsa...

C'est vrai aussi que j'ai réagi car j'ai un instant cru que votre condamnation du script proposé par djimdjamoul était plus d'origine esthétique que rationelle.

Le n00b que je suis en matière d'analyse organique d'un projet web a appris quelle que chose aujourd'hui grace à vous.

Merci Alsa........S
Modifié par aCOSwt (28 Jan 2007 - 15:51)