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 :

Redirection de Page en javascript selon certains critères


Sujet :

JavaScript

Vue hybride

Anthonyyy Redirection de Page en... 09/03/2009, 19h43
Bovino Pour cela, il faut que tu... 09/03/2009, 19h51
Anthonyyy Merci de ton aide Bovino.... 10/03/2009, 15h28
Bovino windows.location =... 10/03/2009, 15h49
Anthonyyy Erreur dans le code 10/03/2009, 16h00
Anthonyyy On avance 10/03/2009, 17h35
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut Redirection de Page en javascript selon certains critères
    Bonjour,

    Je maintiens 2 sites. les deux sont identiques, l'un est en anglais, l'autre en français. Chaque page française possède son doublon anglais dans un autre dossier (un dossier /FR/ et un dossier /EN/).
    L'utilisateur a la possibilité de passer d'une langue à l'autre à l'aide d'un simple lien qui pointe vers une page ne contenant que le script qui suit.
    2 type d'exceptions sont gérée pour lesquels on ne va pas faire de redirection:
    la premiere est lorsqu'il y a une requete en URL (un ? après le nom de la page), la seconde, celle qui me pose problème, est la gestion des pages 404 (si jamais le doublon d'une des 2 langues n'existe pas par exemple on redirige sur google.com).
    Je ne suis pas un pro du code et doit avoué que ceci est un assemblage de chose glanné ci et là sur les forums mais fonctionne à merveille (a part ce 404 )
    Le code:
    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    <!--
    //Recupere l'URL au complet de la page precedente
    var URL = document.referrer;
     
    //Cherche différentes valeurs dans l'URL
    var PosFR = URL.indexOf("/FR/");
    var PosPI = URL.indexOf("?");
     
    //REDIRECTION SI ADRESSE NON VALIDE (2 CAS)
     
    //REQUETE (REDIRECTION)
     
    //Si le site est en français (Si l'URL contient "/FR/")
    if (PosFR != -1){
    //Si l'URL contient "?" (une requête)
      if (PosPI != -1){
        alert ("Contenu non traduisible");
        URL = "http://www.google.com";
    //redirige
        window.location=(URL);
      }
    }
    //Si le site est en anglais (Si l'URL contient "/EN/")
    if (PosFR == -1){
    //Si l'URL contient "?" (une requête)
      if (PosPI != -1){
        alert ("Non translatable content");
        URL = "http://www.google.com";
    //redirige
        window.location=(URL);
      }
    }
     
    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////PARTIE QUI POSE PROBLÈME/////////////////////////////////////////////////////////
    //404 (REDIRECTION)
     
    //Lis les entêtes
    function getXhr(){
      var xhr = null; 
      if(window.XMLHttpRequest){ // Firefox et autres
        xhr = new XMLHttpRequest(); 
      }else if(window.ActiveXObject){ // Internet Explorer 
        try {
          xhr = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
      }else{ // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        xhr = false;
      } 
      return xhr;
    }
     
    //teste si la page existe avant ouverture 
    function Rediriger(URL){
      var xhr = getXhr();
    //On défini ce qu'on va faire quand on aura la réponse
      xhr.onreadystatechange = function(){
    // Si le serveur a repondu et que la page n'existe pas 
        if(xhr.readyState == 4 && xhr.status == 404){
          window.location.href='http://www.google.com';
        }else{
          window.location.href = URL;
        }
      }
      xhr.open("GET",URL,true);
      xhr.send(null);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    //TRADUCTION
     
    //Si l'URL contient "/FR/"
    if (PosFR != -1){
    //remplace "/FR/" par "/EN/" (case insensitive)
      URL=URL.replace( new RegExp( "/FR/", "i" ), "/EN/" );
    //redirige
      window.location=(URL);
    }else{
    //sinon remplace "/EN/" par "/FR/" (case insensitive)
      URL=URL.replace( new RegExp( "/EN/", "i" ), "/FR/" );
    //redirige
      window.location=(URL); 
    }
     
    -->
    Je ne sais pas ou appelé la fonction Rediriger() ou mieux: pouvoir la supprimer et l'intégrer comme une verification supplémentaire avant de passer d'une page a l'autre.
    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    la seconde, celle qui me pose problème, est la gestion des pages 404 (si jamais le doublon d'une des 2 langues n'existe pas par exemple on redirige sur google.com).
    Pour cela, il faut que tu passes par une requête Ajax (voir les tutos) sauf qu'au lieu de tester xhr.status==200 (la page existe) tu testes sur xhr.status==404 et dans ce cas, tu rediriges vers la page souhaitée.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    Merci de ton aide Bovino. Mais je patauge encore...
    Voila ou j'en suis (juste le code qui nous interesse):
    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
     
    //...
     
    //404 (REDIRECTION)
     
     
    //Création de l'objet XmlHttpRequest dans la fonction getXhr()
    function getXhr(){
      var xhr = null; 
      if(window.XMLHttpRequest){ // Firefox et autres
        xhr = new XMLHttpRequest(); 
      }else if(window.ActiveXObject){ // Internet Explorer 
        try {
          xhr = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
      }else{ // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        xhr = false;
      } 
      return xhr;
    }
     
    function go(){
    //  alert("URL: "+URL);
      var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr.readyState == 4 && xhr.status == 404){
    //      alert("404: "+xhr.responseText);
          windows.location = "http://www.google.com";
        }else{
    //      alert("200 :)");
          window.location=(URL);
        }
      }
    	xhr.open("GET","Home.aspx",true); // home.aspx represente la page d'accueil de mon site
    	xhr.send(null);
    }
     
     
    //TRADUCTION
     
     
    //Si l'URL contient "/ccmfr/"
    if (PosFR != -1){
    //remplace "/ccmfr/" par "/CCM/" (case insensitive)
      URL=URL.replace( new RegExp( "/ccmfr/", "i" ), "/CCM/" );
    //redirige
      go();
    }else{
    //sinon remplace "/CCM/" par "/ccmfr/" (case insensitive)
      URL=URL.replace( new RegExp( "/CCM/", "i" ), "/ccmfr/" );
    //redirige
      go();
    }
    -->
    J'ai repris les 2 fonctions du tuto. Dans la fonction go() je teste l'existence de la page ou non sur le serveur (du moins c'est ce que je pense faire). Si la page existe tout se passe bien, si la page n'existe pas la redirection ne se fait pas. Aurais tu une piste?
    Lorsque les alert box ne sont pas commentées elles aparaissent plusieurs fois.
    Une dernière chose: Sais tu a quoi servent les 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xhr.open("GET","Home.aspx",true);
    xhr.send(null);
    Je retourne bosser les tutos

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    windows.location = "http://www.google.com";

    c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.location.href = "http://www.google.com";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.location.replace("http://www.google.com");
    Mais en tout état de cause, window, pas windows
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut Erreur dans le code
    Je viens de le voir aussi. Désolé.
    Désormais ça redirige à chaque fois sur Google (pour l'exemple) même quand la page existe.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut On avance
    OK le code fonctionne lorsque je fais précéder la redirection d'un alert box.
    Quand je commente les alert, la redirection ne se fait plus.

    Mes conaissances limitées en code ne me permettent pas de comprendre ce comportement.

    Je sais en revanche que dans les 2 cas (avec ou sans alert) le code ne génère aucune erreur (pas dans le navigateur en tout cas).
    Voilà le code fonctionnel:

    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
     
    // ...
     
    function go(){
      var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr.readyState == 4 && xhr.status == 404){
          alert("404: "+xhr.responseText);
          window.location = ("http://www.google.com");
        }else{
          alert("200 :)");
          window.location=(URL);
        }
      }
    	xhr.open("GET","Home.aspx",true); // home.aspx represente la page d'accueil de mon site
    	xhr.send(null);
    }
     
     
    //TRADUCTION
     
     
    //Si l'URL contient "/ccmfr/"
    if (PosFR != -1){
    //remplace "/ccmfr/" par "/CCM/" (case insensitive)
      URL=URL.replace( new RegExp( "/ccmfr/", "i" ), "/CCM/" );
    //redirige
      go();
    }else{
    //sinon remplace "/CCM/" par "/ccmfr/" (case insensitive)
      URL=URL.replace( new RegExp( "/CCM/", "i" ), "/ccmfr/" );
    //redirige
      go();
    }
    Existe t'il un composant qui pourrai avoir le meme comportement que les alert box mais en restant non visible à l'utilisateur?

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(xhr.readyState == 4 && xhr.status == 404)
    Dans la mesure où la page n'existe pas dans ce cas, le xhr.readyState (c'est-à-dire : les données ont été transmises) ne risque pas d'être vrai puisqu'il n'y a pas de données !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Masque des colonnes selon certains critères sans les filtres
    Par CLAUDE19 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/10/2011, 17h23
  2. [XSLT] Copie partielle de noeud selon certain critère
    Par FadeOut dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/04/2010, 08h24
  3. [Batch] Récupérer tous les fichiers selon certains critères
    Par Mistic100 dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 27/07/2009, 01h20
  4. [XL-2000] Modifier une cellule selon certains critères
    Par Nicolas Plan dans le forum Excel
    Réponses: 2
    Dernier message: 28/04/2009, 10h18
  5. Sélection de lignes selon certains critères
    Par gangsterus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/10/2007, 00h01

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