IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Javascript] Librairie de compatibilité


Sujet :

JavaScript

  1. #21
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut
    Idée :

    je reprends le script de sub0 que je modifie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    function getNavigateur(){
     var agt=navigator.userAgent.toLowerCase();
     var ns4=document.layers;
     var nav = null;
     if(document.all){
         if(agt.indexOf('opera')>-1) var opera=true;else var ie=true; }else
     if(document.getElementById){
         if(agt.indexOf('netscape')>-1) var ns6=true;else
         if(agt.indexOf('firefox')>-1) var ffx=true;else var moz=true; }
     
     if(ns4){
         nav = new Ns4();
     }else if(opera){
         nav = new Opera();
     }else if(ie){
         nav = new Iexplorer();
     }else if(ns6){ 
         nav = new Netccape();
     }else if(ffx){ 
         nav = new FireFox();
     }else if(moz){
         nav = new Mozilla();
     }else{
         alert('unknow');
     }
    return nav;
    }
    Dans chaque classe on implémente les méthodes selon les spécificités
    Ex avec un bout de code pour le navigateur ns4 (je prends un bout de Sub0 encore)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    //constructeur
    function Ns4(){
      this.nom = "NS4";
      this.resolution = resolution;
      //etc...
    }
     
    function resolution() {
     ah = screen.availHeight;
     al = screen.availLeft;
     at = screen.availTop;
     aw = screen.availWidth;
     cd = screen.colorDepth;
     h  = screen.height;
     pd = screen.pixelDepth;
     w  = screen.width;
     
     res = 'availHeight:\t' + ah + '\n';
     res = res + 'availLeft:\t' + al + '\n';
     res = res + 'availTop:\t' + at + '\n';
     
     res = res + 'availWidth:\t' + aw + '\n';
     res = res + 'colorDepth:\t' + cd + '\n';
     res = res + 'height:\t\t' + h + '\n';
     
     res = res + 'pixelDepth:\t ' + pd + '\n';
     
     res = res + 'width:\t\t' + w + '\n';
     return res;
     
    }
    Ainsi, chaque navigateur possède cette fonction résolution ce qui permet de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var nav  = getNavigateur();
    alert(nav.getResolution());
    Il faudrait même créer une classe mère "Navigateur" qui incorporerait toutes les méthodes communes (ensuite l'héritage se fait avec this.parent)
    Bon, j'espère ne pas dire trop de bêtises

  2. #22
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    bonjour,

    j'éprouve toujours quelques reserves à me baser sur le navigator.userAgent pour identifier le navigateur.
    Meme si IE ne permet pas de changer nativement cette string, je suppose qu'il doit bien y avoir un dérivé qui le permette (AvantBrowser, etc ... ?), voir via un plug-in ou quelque chose du genre.
    Pour les autres navigateurs il est encore plus aisé de la changer.

    Il me semble également que Opera ne s'identifie que depuis peut sous ce nom dans sa string userAgent.

    L'idée serait plutot de tester des propriétés valides seulement pour un navigateur (ou famille de navigateurs).
    Par exemple pour identifier opera il existe un window.opera, qui tombera plus juste qu'un userAgent.
    Attention ! window.opera doit etre testé avec un window.opera && true, ou quelque chose de semblant, sinon cela peut ne pas fonctionner.

    On peut retrouver ici http://www.howtocreate.co.uk/tutoria...s/sniffer.html les tests complets sur cette methode qui permet de construire un getNavigator().
    Je ne met pas à jour la fonction n'ayant pas encore lu les termes d'utilisation (même si je ne crois pas que ces termes ce rapportent à ces tests, mais au cas où ...).

    Sinon sans utiliser tout ces tests, avant d'avoir vu la page que je viens de donner, et même encore aujourd'hui n'ayant pas besoin de tous les identifier, j'utilisais les tests suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    (navigator.vendor == 'KDE') {
    	// Les tests suivant provoquent une erreur chez Konqueror, il faut absolument le tester en premier !
    	...
    } else
     
    // internet explorer windows
    if(window.external) {
    	...
     
    } else
     
    // internet explorer mac
    if (document.all && (navigator.userAgent.indexOf('Win') < 0)) {
    	...
     
    } else
     
    //Opera
    if (window.opera && window.print) {
    	...
    } else
     
    // netscape 6.x
    if (window.sidebar) {
    	...
    } else
     
    // netscape 4.x
    if (document.layers) {
    	...
    }
     
    else { ... }
    Et seconde remarque :
    J'ai quelques problemes d'execution sur certains vieux navigateurs si mon fichier JS est encodé en UTF-8, normalement ma page l'est également.
    Si mes souvenirs sont bons, c'est avec IE 3, je crois que la version 4 également (oui mais là si on utilise encore ça ...), et Nestcape 4.
    Il faudrait que je reteste ça un jour pour vraiment savoir quels navigateurs pose problème ...

    Voilà, en esperant que cela poura aider

  3. #23
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Voici le code que j'utilise pour obtenir la position de la souris avec Javascript.
    Il doit sûrement avoir moyen d'optimiser le code... Il fonctionne avec tous mes navigateurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    var iev=document.all;
    if(!iev)var mov=document.getElementById;
    if(!mov&&!iev)alert("Application incompatible avec votre navigateur!");
     
    var PosX,PosY;
     
    //============================================================================//
    // Supprime le "px" en fin de chaîne -> nombre
    //============================================================================//
    function nbr(nombrepx){
    	if(nombrepx){
    		if(nombrepx.length>=3)
    			if(nombrepx.substr(nombrepx.length-2,2)=="px")
    				return (nombrepx.substr(0,nombrepx.length-2))*1;
    		return nombrepx*1;}
    	return 0*1;
    }
     
    //============================================================================//
    // Retourne la valeur du scroll
    //============================================================================//
    function GetScrollX(){
    	if(mov)return nbr(document.body.scrollLeft); 
    	if(document.documentElement.scrollLeft)
    		return nbr(document.documentElement.scrollLeft);else 
    		return nbr(document.body.scrollLeft); 
    }
     
    //============================================================================//
    function GetScrollY(){
    	if(mov)return nbr(document.body.scrollTop);
    	if(document.documentElement.scrollTop)
    		return nbr(document.documentElement.scrollTop);else 
    		return nbr(document.body.scrollTop); 
    }
     
     
    //============================================================================//
    // Détection des coordonnées de la souris
    //============================================================================//
    function MyMousePosX(evenement){
    	if(mov)return nbr(evenement.clientX)+GetScrollX();
    	return nbr(window.event.x)+GetScrollX()-2;
    }
     
    //============================================================================//
    function MyMousePosY(evenement){
    	if(mov)return nbr(evenement.clientY)+GetScrollY();
    	return nbr(window.event.y)+GetScrollY()-2;
    }
     
     
    //============================================================================//
    // Souris en mouvement
    //============================================================================//
    function Position(evenement){
    	PosX=nbr(MyMousePosX(evenement))-
       nbr(document.getElementById("mytab").left)-
       nbr(document.getElementById("mydiv").left);
    	PosY=nbr(MyMousePosY(evenement))-
       nbr(document.getElementById("mytab").top)-
       nbr(document.getElementById("mydiv").top);
    	if(PosX>=0 && PosX<=nbr(document.getElementById("mydiv").offsetWidth)&&
    	   PosY>=0 && PosY<=nbr(document.getElementById("mydiv").offsetHeight)){		
    	  document.getElementById("mydiv").style.backgroundColor=col2;	
        }else{
    	  document.getElementById("mydiv").style.backgroundColor=col1;	
    		}
    }
     
    //============================================================================//
    // INITIALISATION
    //============================================================================//
    document.onmousemove = Position;
    à+
    De retour parmis vous après 10 ans!!

  4. #24
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Encore une adresse intéressante trouvée par hasard...
    De retour parmis vous après 10 ans!!

Discussions similaires

  1. [PHP-JS] compatibilité javascript php
    Par sadkill dans le forum Langage
    Réponses: 2
    Dernier message: 09/05/2007, 20h16
  2. [AJAX] Problème de javascript / compatibilité
    Par Pepe67 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 30/06/2006, 12h30
  3. Documentez vos librairies JavaScript comme des pros !
    Par Claude Pelletier dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/12/2005, 14h09
  4. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo