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
Yermat
ASM wrote:
ASM wrote:

Olivier Miakinen wrote:

Du coup, pour gérer les plus vieux IE, je me demande si le test ne
serait pas mieux comme ceci :

ie = (!document.getElementsByTagName)
|| (!document.getElementsByTagName('*'))
|| (!document.getElementsByTagName('*').length)
|| document.getElementsByTagName('*')[0].tagName=='!';




je propose ce nouveau test :
http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE_trans_41.htm


Pour Netscape Communicator 4.76 (Linux) :
est-ce IE ? : undefined
ie_4 = false
ie_5.0 = true
ie_5.5 = true
ie_6 = false

Pour Firefox 1.0.1 (Linux) :
est-ce IE ? : false
ie_4 = false
ie_5.0 = true
ie_5.5 = true
ie_6 = false

Pour Konqueror 3.1.4 (Linux) :
est-ce IE ? : false
ie_4 = true
ie_5.0 = true
ie_5.5 = true
ie_6 = false

--
Yermat



Avatar
Olivier Miakinen

Olivier Miakinen wrote:
Je cite ce que disait Michael Winter (7e article du lien que tu as donné) :


si tu avais pu traduire du même coup, çà m'aurait bien facilité.


Oh ! Tu serais donc encore plus nul que moi en estranger ? J'essaye.

Again, I'm confused as to what you mean. Perhaps: "Will IE/Win ever
return a non-empty collection using this code?" If so, then yes, IE6
will return a collection containing all elements within the document, as
it should. IE5.x will always return an empty collection, and IE4 doesn't
support the getElementsByTagName method at all.



De nouveau, je me demande ce que tu veux dire. Peut-être « IE/Win
retournera-t-il toujours une collection non vide en utilisant ce
code » ? Dans ce cas, alors oui, IE6 retournera une collection de tous
les éléments contenus dans le document, ce qui est le comportement
prévu. IE5.x retournera toujours une collection vide, et IE4 ne
supporte pas la méthode getElementsByTagName du tout.

Je n'ai plus IE4 Mac pour voir ...
Mais IE5 1 ou 2 pour Mac ne retourne pas une empty collection
... loin s'en faut ... puisque, par chance, il retourne aussi le doctype.


Ok, donc si j'en crois tes essais sur Mac et les propos de Michael
Winter pour Windows, IE5/Mac se comporte comme IE6/Win.

Du coup, pour gérer les plus vieux IE, je me demande si le test ne
serait pas mieux comme ceci :

ie = (!document.getElementsByTagName)
|| (!document.getElementsByTagName('*'))
|| (!document.getElementsByTagName('*').length)
|| document.getElementsByTagName('*')[0].tagName=='!';



!document.getElementsByTagName
-> pour avoir true sur IE4/Win

!document.getElementsByTagName('*') ||
!document.getElementsByTagName('*').length
-> pour avoir true sur IE5/Win

document.getElementsByTagName('*')[0].tagName == '!'
-> pour avoir true sur IE5/Mac et IE6/Win

Cela ne devrait rien changer aux navigateurs corrects, qui doivent
répondre true jusqu'à document.getElementsByTagName('*').length.



Je voulais dire "true" aux tests directs, et donc "false" aux tests
inversés par "!".


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


Avatar
ASM
ASM wrote:

je propose ce nouveau test :
http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE_trans_41.htm


NC4.5 :
est-ce IE ? : undefined
ie_4 = false
ie_5.0 = false
ie_5.5 = false
ie_6 = false

FF 1.4
est-ce IE ? : false
ie_4 = false
ie_5.0 = true
ie_5.5 = true
ie_6 = false

Opera 8.01 :
est-ce IE ? : false
ie_4 = true
ie_5.0 = true
ie_5.5 = true
ie_6 = false

Safari 1.2.4 :
est-ce IE ? : false
ie_4 = false
ie_5.0 = true
ie_5.5 = true
ie_6 = false

iCab 3.00 beta 280 :
est-ce IE ? : false
ie_4 = false
ie_5.0 = true
ie_5.5 = true
ie_6 = false

Camino :
est-ce IE ? : false
ie_4 = false
ie_5.0 = true
ie_5.5 = true
ie_6 = false

IE 5.2.3
est-ce IE ? : true
ie_4 = true
ie_5.0 = true
ie_5.5 = true
ie_6 = true

IE 5.0.1 :
est-ce IE ? : true
ie_4 = true
ie_5.0 = true
ie_5.5 = true
ie_6 = true


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
Olivier Miakinen wrote:


Olivier Miakinen wrote:

Je cite ce que disait Michael Winter (7e article du lien que tu as donné) :


si tu avais pu traduire du même coup, çà m'aurait bien facilité.



Oh ! Tu serais donc encore plus nul que moi en estranger ? J'essaye.


tu es un chou.

De nouveau, je me demande ce que tu veux dire. Peut-être « IE/Win
retournera-t-il toujours une collection non vide en utilisant ce
code » ? Dans ce cas, alors oui, IE6 retournera une collection de tous
les éléments contenus dans le document, ce qui est le comportement
prévu. IE5.x retournera toujours une collection vide, et IE4 ne
supporte pas la méthode getElementsByTagName du tout.


c'est bien ce qu'approximavement j'avais interprété :-)

Je voulais dire "true" aux tests directs, et donc "false" aux tests
inversés par "!".


voir l'autre soluce non+non ?

--
Stephane Moriaux et son [moins] vieux Mac



Avatar
ASM
Olivier Miakinen wrote:
En revanche, tous tes tests répondront "ie = false" sur des IE/Win
versions 4 et 5. Cela dit, je m'en fous (je disais bien que ces versions
sont trop vieilles pour que je veuille contourner leurs bugs) mais il
faut le savoir.


par le ! ! je cherche à ce que les non IE anciens ne râlent pas
c'est tout ...


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
Olivier Miakinen

[...] IE5.x retournera toujours une collection vide, et IE4 ne
supporte pas la méthode getElementsByTagName du tout.


[...]

Je voulais dire "true" aux tests directs, et donc "false" aux tests
inversés par "!".


voir l'autre soluce non+non ?


Ça ne change strictement rien au point indiqué par Michael.

Tant que tu testes sur des navigateurs qui répondent un truc non nul à :
- document.getElementsByTagName
et à :
- document.getElementsByTagName('*')
et à :
- document.getElementsByTagName('*').length
alors le résultat sera le même entre les "&& (...)" que tu utilises et
les "|| (!...)" que je proposais.

En revanche, tous tes tests répondront "ie = false" sur des IE/Win
versions 4 et 5. Cela dit, je m'en fous (je disais bien que ces versions
sont trop vieilles pour que je veuille contourner leurs bugs) mais il
faut le savoir.

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


Avatar
ASM
Olivier Miakinen wrote:
alors le résultat sera le même entre les "&& (...)" que tu utilises et
les "|| (!...)" que je proposais.


absolument pas :
mes tests section 2 (ie4...6)

NC4.5 répond TRUE à
http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE_trans_40.htm

et FALSE à
http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE_trans_41.htm

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
newdb
ASM wrote:
http//perso.wanadoo.fr/stephane.moriaux/truc/detect_IE.htm
à faire tester par les Macounets les Windoziens et Lunixois.


macos 9.2.2

mozilla 1.3.1 -> est-ce IE ? : false
explorer 5.1.7 -> est-ce IE ? : true
communicator 4.77 -> est-ce IE ? : undefined
--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="

Avatar
Le Fou
ASM a écrit

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.


Sous Win98SE, ça retourne :
"0" avec IE 5.0
"false" avec FF 1.02

--
A'tchao

Le Fou
http://www.ffessm-cd84.com/
http://ehiller.club.fr/

Avatar
Le Fou
ASM a écrit

je propose ce nouveau test :
http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE_trans_41.htm


Win98SE :

IE 5.0
Est-ce IE ? : 0
ie_4 = true
ie_5.0 = false
ie_5.5 = false
ie_6 = false

Firefox 1.02
Est-ce IE ? : false
ie_4 = false
ie_5.0 = true
ie_5.5 = true
ie_6 = false

--
A'tchao

Le Fou
http://www.ffessm-cd84.com/
http://ehiller.club.fr/

1 2 3 4