OVH Cloud OVH Cloud

Mini-concours

32 réponses
Avatar
Olivier Miakinen
Bonjour,

Je voudrais vous proposer un mini-concours. Il n'y a strictement rien à
gagner, sinon mon estime personnelle...

Voici le challenge. Il s'agit d'initialiser une variable avec la valeur
true ou false, selon que le navigateur supporte ou non le sélecteur CSS
:hover sur autre chose qu'une ancre... autant dire qu'il faut détecter
si le navigateur est oui ou non Microsoft Internet Explorer.

Quelques précisions :
- Si le test se trompe pour les navigateurs très vieux du style
Netscape 4 ou Internet Explorer 5.0, ce n'est pas très grave.
- En revanche, le test ne doit pas se tromper pour les navigateurs
récents qui se font passer pour MSIE en maquillant leur appName.
- Le test ne doit pas porter sur une liste de navigateurs (Opera,
iCab, Mozilla, Firefox, etc.) car une telle liste ne sera jamais
exhaustive.
- Le test doit être aussi court que possible (ne pas dépasser trois
ou quatre lignes de 80 colonnes) et surtout être lisible.

Je précise que ce n'est pas qu'un jeu futile, mais que j'aimerais
vraiment avoir une solution utilisable (voir mes derniers articles dans
fr.comp.infosystemes.www.auteurs pour voir à quoi cela va servir).


Merci d'avance !

--
Olivier Miakinen

10 réponses

1 2 3 4
Avatar
Cenekemoi
Bonjour,

Je voudrais vous proposer un mini-concours. Il n'y a strictement rien
à gagner, sinon mon estime personnelle...

Voici le challenge. Il s'agit d'initialiser une variable avec la
valeur true ou false, selon que le navigateur supporte ou non le
sélecteur CSS
hover sur autre chose qu'une ancre... autant dire qu'il faut détecter
si le navigateur est oui ou non Microsoft Internet Explorer.



Ceux que j'utilise :

dom = document.getElementById ?1:0
IE = document.all ?1:0
IE5 = IE && dom
IE4 = IE && !dom
NS6 = !IE && dom
NS4 = document.layers ?1:0
NS = NS4 || NS6

Pour ton problème, afin d'avoir IE 5+ en une ligne :
IE5 = (document.all && document.getElementById) ? 1:0;

(tu peux mettre true/false à la place de 1/0, cela ne change rien...Il
est même possible, bien que moins propre de se passer totalement des
affectations conditionnelles: IE5 = document.all &&
document.getElementById; )

--
Cordialement, Thierry ;-)


Avatar
ASM
Cenekemoi wrote:

Voici le challenge. Il s'agit d'initialiser une variable avec la
valeur true ou false, selon que le navigateur supporte ou non le
sélecteur CSS

hover sur autre chose qu'une ancre...




Le *truc* est bien défini :
déterminer que le navigateur supporte
les pseudo-classes *ailleurs* que sur les balises A

exemple de navigateur ne le supportant pas :
IE (ttes versions à ce jour)

Ceux que j'utilise :

Pour ton problème, afin d'avoir IE 5+ en une ligne :
IE5 = (document.all && document.getElementById) ? 1:0;


Non ...
ceci permet seulement(*) de savoir si le navigateur est compatible IE5,
et ne permet pas de déterminer que c'est *exclusivement* IE


(*) Opera et iCab, par exemple, vont passer IE5 à true

--
Stephane Moriaux et son [moins] vieux Mac



Avatar
Olivier Miakinen

dom = document.getElementById ?1:0
IE = document.all ?1:0


Je ne peux que confirmer la réponse d'ASM. Tester document.all n'est
pas un bon test pour IE car il y a plusieurs faux positifs parmi les
navigateurs récents. Ceux-ci, bien que supportant document.all, savent
parfaitement traiter le sélecteur CSS :hover sur tout élément (pas
seulement sur les ancres).

Pour ton problème, afin d'avoir IE 5+ en une ligne :
IE5 = (document.all && document.getElementById) ? 1:0;


Donc non, désolé.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Cenekemoi

dom = document.getElementById ?1:0
IE = document.all ?1:0


Je ne peux que confirmer la réponse d'ASM. Tester document.all n'est
pas un bon test pour IE car il y a plusieurs faux positifs parmi les
navigateurs récents. Ceux-ci, bien que supportant document.all, savent
parfaitement traiter le sélecteur CSS :hover sur tout élément (pas
seulement sur les ancres).

Pour ton problème, afin d'avoir IE 5+ en une ligne :
IE5 = (document.all && document.getElementById) ? 1:0;


Donc non, désolé.


Bon, bon, d'accord !...

Alors, voila qui est mieux :
IE5 = window.createPopup ? 1:0;

(Ca, c'est bien spécifique IE5+ !)

--
Cordialement, Thierry ;-)


Avatar
Olivier Miakinen

Alors, voila qui est mieux :
IE5 = window.createPopup ? 1:0;


Ah je ne connaissais pas. J'ai trouvé une démo ici (ne marche évidemment
pas avec Gecko ou Opera sur Windows) :
http://msdn.microsoft.com/workshop/samples/author/dhtml/popup/usingpopup.htm

(Ca, c'est bien spécifique IE5+ !)


J'en ai bien l'impression. ASM, tu confirmes que la démo ci-dessus ne
fonctionne ni sur iCab ni sur Opera Mac (*) ? Si oui, c'est vraiment
parfait (un test particulièrement court, qui plus est) !

--
Olivier Miakinen

(*) Il faudra s'assurer que non seulement ça ne marche pas, mais qu'en
plus l'objet n'existe effectivement pas. Test prévu dès que possible.

Avatar
ASM
Olivier Miakinen wrote:

Alors, voila qui est mieux :
IE5 = window.createPopup ? 1:0;


Ah je ne connaissais pas. J'ai trouvé une démo ici (ne marche évidemment
pas avec Gecko ou Opera sur Windows) :
http://msdn.microsoft.com/workshop/samples/author/dhtml/popup/usingpopup.htm

(Ca, c'est bien spécifique IE5+ !)


J'en ai bien l'impression. ASM, tu confirmes que la démo ci-dessus ne
fonctionne ni sur iCab ni sur Opera Mac (*) ? Si oui, c'est vraiment
parfait (un test particulièrement court, qui plus est) !


C'est tellement magnifique que çà ne marche pô non plus sur IE
Hop! poubelle, désolé...


désolé je suis sous les orages et ne me connecte qu'en pointillé

De mon côté j'ai pondu çà :
http//perso.wanadoo.fr/stephane.moriaux/truc/detect_IE.htm
en seulement 4 lignes !

à faire tester par les Macounets les Windoziens et Lunixois.

--
Stephane Moriaux et son [moins] vieux Mac


Avatar
Olivier Miakinen

http://msdn.microsoft.com/workshop/samples/author/dhtml/popup/usingpopup.htm


C'est tellement magnifique que çà ne marche pô non plus sur IE
Hop! poubelle, désolé...


Haha... excellent !

De mon côté j'ai pondu çà :
http//perso.wanadoo.fr/stephane.moriaux/truc/detect_IE.htm
en seulement 4 lignes !


Ça me semble bien, ce truc. C'est amusant que IE considère le doctype
comme une balise HTML !

à faire tester par les Macounets les Windoziens et Lunixois.


Tests sur Windows 2000 :
MSIE 6.0 OK (true)
Mozilla 1.7.8 OK (false)
Opera 7.54 OK (false)
Netscape 7.2 OK (false)

Je testerai ce soir avec Mozilla 1.6 et Firefox, mais sans beaucoup de
doutes sur le résultat.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.


Avatar
Christophe PEREZ
Le Thu, 08 Sep 2005 19:57:16 +0200, ASM a écrit:

à faire tester par les Macounets les Windoziens et Lunixois.


Firefox et Konqueror sous Linux :

est-ce IE ? : false

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Olivier Miakinen

http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE.htm


Tests sur Windows 2000 :
MSIE 6.0 OK (true)
Mozilla 1.7.8 OK (false)
Opera 7.54 OK (false)
Netscape 7.2 OK (false)
+ Mozilla 1.6 OK (false)

+ Firefox 1.0.6 OK (false)

J'achète !


Avatar
ASM
Olivier Miakinen wrote:


http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE.htm


Tests sur Windows 2000 :
MSIE 6.0 OK (true)



Même celui-là est vérolé pareil ?

Mozilla 1.7.8 OK (false)
Opera 7.54 OK (false)
Netscape 7.2 OK (false)


+ Mozilla 1.6 OK (false)
+ Firefox 1.0.6 OK (false)

J'achète !


Je vends, si vraiment çà marche.

Je suis d'autant plus content de ma trouvaille
que çà fait un bout de temps que je cherche
<http://groups.google.fr/group/comp.lang.javascript/tree/browse_frm/thread/4dc9008e52064056/0db5d830a30537ff?rnum=1&hl=fr&qÞtect+IE+[was]+getElementsByTagName&_done=%2Fgroup%2Fcomp.lang.javascript%2Fbrowse_frm%2Fthread%2F4dc9008e52064056%2F0db5d830a30537ff%3Ftvc%3D1%26q%3DDetect+IE+[was]+getElementsByTagName%26hl%3Dfr%26#doc_7621834fa10d45c8>

Faudra tout de même peaufiner pour les navigateurs plus anciens,
faudrait pas que çà les pousse à geindre ou à gueuler.

--
Stephane Moriaux et son [moins] vieux Mac



1 2 3 4