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 :

Détection Javascript via PHP, conseil sur un script qui marche


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Par défaut Détection Javascript via PHP, conseil sur un script qui marche
    Bonjour à tous,

    Je ne poste pas ici pour demander comment faire un script mais pour vous demander ce que pensez de cette méthode que je trouve bien trop complexe pour une si simple tâche..

    Je développe :

    Il s'agit d'un script permettant de gérer le contenu de ses pages selon l'activation ou non du Javascript par l'utilisateur de façon très simple et en PHP surtout.
    De cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    if (!$_SESSION['js'])
            include_once 'gere_pas_js.php';
    else
            include_once 'gere_js.php';
    ?>
    Mais pour cela il fallut que j'utilise des artifices assez extravagant, je détail ca :

    Tout en haut de chaque page je pense inclure ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    session_start();
    $current_url = $_SERVER['REQUEST_URI'];
    if ($_GET['detected'] < (time() - 20) || !isset($_GET['detected']))
    {       
            $end_url = explode("?", $_SERVER['REQUEST_URI']);
            $_SESSION['old_get_vars'] = $end_url[1];
            if (!preg_match("#^detected=.*$#", $_SESSION['old_get_vars']))
                    $filtred_args = explode("&detected", $_SESSION['old_get_vars']);
            $_SESSION['old_get_vars'] = $filtred_args[0];
            $_SESSION['js'] = 1;
    }
    ?>
    Et un peu plus bas entre les balises <head> et </head> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    if ($_GET['detected'] < (time() - 20) || !isset($_GET['detected']))
            echo "<noscript><meta http-equiv=\"Refresh\" content=\"0;URL=include_de_test.php\"></noscript>";
    ?>
    Le principe est le suivant :
    L'utilisateur charge la page, on prétend qu'il a javascript activé, ci ce n'est pas le cas une redirection se fait entre les balises <noscript> et </noscript> qui l'amène sur une page mettant la variable de session "js" à 0.

    Il est ensuite redirigé sur la 1ère page qui sera chargée en fonction de cette variable de session.

    Si l'utilisateur a Javascript activé ce sera transparent pour lui et aucune redirection ne sera faite, donc pas gênant. Pour l'utilisateur ne le possédant pas il devra subir 2 redirections.

    L'avantage c'est que de cette manière c'est très simple de gérer les cas avec ou sans Javascript.

    Mais le soucis c'est que si le visiteur n'a pas Javascript, qu'il est averti sur le site et qu'il l'active, il faut que quand il actualise il soit pris en charge. Donc c'était un peu le bazard de savoir quand recharger la page pour que d'un coté il puisse activer Javascript quand il veut, et d'un autre que ça parte pas en boucle infinie.

    J'ai donc utilisé time() en testant si la page a été détectée il y a plus ou moins de 20 secondes..

    Mais il y avait aussi le problèmes des variables passées en paramètres par la méthode GET, il faut les conserver et ca oblige un petit parsing de la chaîne.. encore et encore du calcul..

    Je ne maitrise pas encore bien PHP et il y a surement des méthodes de parsing bien plus efficaces et rapides pour faire ce que je fais avec 2 explode().

    Pour cela je m'en remet aux spécialistes

    Pour finir voila le code tout bête de la page de redirection, mais qui inflige encore pas mal de calcul au serv... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    session_start();
    $_SESSION['js'] = 0;
    $old_vars = (!empty($_SESSION['old_get_vars'])) ? "?".$_SESSION['old_get_vars']."&detected=".time() : "?detected=".time();
    echo "<meta http-equiv=\"Refresh\" content=\"0; test.php".$old_vars."\">";
    ?>
    Voila c'est un peu la galère de conditionner avec un langage serveur quelque chose qui dépend du client, et c'est il me semble totalement impossible à faire en 1 seul chargement de page.

    J'ai pas mal cherché sur le net une solution simple et rapide mais sans succès, c'est toujours des magouilles parfois allant assez loin pour finalement pas grand chose.

    Voila merci d'avoir lu le pavé.. j'espère que ca pourra quand même aider certains d'entre vous qui se demandais comment faire

  2. #2
    Membre Expert
    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 : 52

    Informations professionnelles :
    Activité : Développeur Web

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

    J'ai déjà fait quelque chose de similaire :
    http://php.developpez.com/sources/?page=phpjs#detectjs

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Par défaut
    Salut,

    Merci pour ta réponse c'est bien plus simple comme tu l'a fait

    J'ai entendu parler d'une autre méthode qui consiste à utiliser Ajax, en mettant une variable de session à 0 par exemple qui passera à 1 via Ajax si l'utilisateur le possède.

    Une autre solution consisterai à utiliser une image dans laquelle on déclare une variable de session par exemple ?

    Qu'en penses-tu ?

  4. #4
    Membre Expert
    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 : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Citation Envoyé par Stnaire Voir le message
    J'ai entendu parler d'une autre méthode qui consiste à utiliser Ajax, en mettant une variable de session à 0 par exemple qui passera à 1 via Ajax si l'utilisateur le possède.

    Une autre solution consisterai à utiliser une image dans laquelle on déclare une variable de session par exemple ?

    Qu'en penses-tu ?
    Pourrais-tu détailler le principe de fonctionnement de ces solutions ?

    Surtout, quels avantages obtiendrait-on avec ?

Discussions similaires

  1. conseil sur un form qui me sert de MessageDlg
    Par BuzzLeclaire dans le forum Langage
    Réponses: 4
    Dernier message: 01/03/2009, 22h56
  2. [MySQL] vos avis sur un script qui fonctionne pas
    Par younek dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/12/2008, 16h47
  3. Réponses: 10
    Dernier message: 12/10/2008, 20h04
  4. script qui marche en locale mais pas sur le web
    Par koKoTis dans le forum Langage
    Réponses: 7
    Dernier message: 08/09/2008, 16h07
  5. [Dojo] Mise à jour d'un select via php : ok sur FF, pas sur IE6
    Par fayred dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 22/11/2007, 17h51

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