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