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
ASM
Christophe PEREZ wrote:
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


Ouf !

Bien que ...
à part IE, quel navigateur pourrait se fourvoyer ainsi ?

Merci Bill

--
Stephane Moriaux et son [moins] vieux Mac


Avatar
Olivier Miakinen

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.



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


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

<cit.>
/* If gEBTN is supported, attempt to use it. */
if(document.getElementsByTagName) {
collection = document.getElementsByTagName('*');
}


Does IE Windows unsupport this collection ?


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.
</cit.>


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=='!';

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


Avatar
Dr John Stockton
JRS: In article <431fe619$0$7840$, dated Thu,
8 Sep 2005 09:17:51, seen in news:fr.comp.lang.javascript, Cenekemoi
posted :

Ceux que j'utilise :

dom = document.getElementById ?1:0


ou

dom = !!document.getElementById

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©
<URL:http://www.jibbering.com/faq/> JL/RC: FAQ of news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.

Avatar
Christophe PEREZ
Le Thu, 08 Sep 2005 22:30:26 +0200, ASM a écrit:

Bien que ...
à part IE, quel navigateur pourrait se fourvoyer ainsi ?


IE ?

;-)

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
ASM
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é.

<cit.>

/* If gEBTN is supported, attempt to use it. */
if(document.getElementsByTagName) {
collection = document.getElementsByTagName('*');
}




Does IE Windows unsupport this collection ?



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.
</cit.>


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.

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=='!';

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


Comme vieux navigateur je n'ai plus que NC4.5 (et IE5.1) ancien Mac

pour cette page :
http://perso.wanadoo.fr/stephane.moriaux/truc/detect_IE_trans_40.htm

NC me dit :
est-ce IE ? : undefined
test non ou non
ie4 = true
ie5 = true
ie6 = true
ie7 = true
c'est à dire vrai partout (forcément puisque vrai dès le début)

tandis que mes IE-5 me disent :
est-ce IE ? : true
test non ou non
ie4 = false
ie5 = false
ie6 = false
ie7 = true

(pour FF c'est false pour tout)

--
Stephane Moriaux et son [moins] vieux Mac



Avatar
Cenekemoi
Bonjour à ASM qui nous a
C'est tellement magnifique que çà ne marche pô non plus sur IE


Je ne comprend pas cette phrase ?!?
Chez moi, sous IE "window.createPopup" renvoie bien un objet...

Peux-tu expliciter, STP ?

--
Cordialement, Thierry ;-)

Avatar
Yermat
ASM wrote:
Olivier Miakinen wrote:
[...]
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.


Les tests sont fait sous Linux.

Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.7.6) Gecko/20050226
Firefox/1.0.1 : FALSE

Konqueror 3.1.4 : FALSE

Netscape Communicator 4.76 : UNDEFINED (ie4 = true ie5 = true ie6 =
true ie7 = true)

Netscape 7.1
Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.4) Gecko/20030624
Netscape/7.1 : FALSE

--
Yermat

Avatar
Olivier Miakinen

Je ne comprend pas cette phrase ?!?
Chez moi, sous IE "window.createPopup" renvoie bien un objet...


Sur Mac ? Quelle version de IE ?


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

Avatar
ASM
Cenekemoi wrote:
Bonjour à ASM qui nous a

C'est tellement magnifique que çà ne marche pô non plus sur IE



Je ne comprend pas cette phrase ?!?
Chez moi, sous IE "window.createPopup" renvoie bien un objet...

Peux-tu expliciter, STP ?


voir signature ?
et comprendre : marche pô avec IE *Mac*
(enfin ... chez moi hein ?)

esspliquicitations :
IE gueule à l'erreur,
ce truc bidule n'existe pas pour lui


--
Stephane Moriaux et son [moins] vieux Mac


Avatar
ASM
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

basé sur :
ie = !!document.getElementsByTagName
&& !!document.getElementsByTagName('*')
&& !!document.getElementsByTagName('*').length
&& document.getElementsByTagName('*')[0].tagName=='!';

le non+non permettant le false (s'il y a lieu)
sans erreur sur un eventuel 'undefined'
si appel direct (sans !! )

--
Stephane Moriaux et son [moins] vieux Mac


1 2 3 4