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 :

window.location & bookmarklet


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut window.location & bookmarklet
    QUESTION DE COMPORTEMENT SOUS FIREFOX

    Bonjour à tous.
    Je me pose une question sur un comportement étrange de l'objet window.location dont je n'ai pas trouvé d'explications convenable
    (une réponse existe peut-être en anglais sur le net, mais hors de ma portée linguistique, si je puis dire).

    Voilà le problème.
    J'ai créé un bookmarklet. Celui-ci appelle un script sur une page distante en créant une balise <script> sur la page courante avec l'attribut src pointant sur la page de script en question. Comme ceci :

    javascript:headElmt=document.getElementsByTagName('head')[0];var scriptElmt=document.createElement('script');scriptElmt.setAttribute('src','http://oontack.fr/tests/test.js');void headElmt.appendChild(scriptElmt);

    Le script apellé de cette manière fonctionne à merveille. Une fois son travaille effectué, la dernière ligne de celui-ci consiste à envoyer les données qu'il a récupéré de la page courante à une page distante par l'intermédiaire de l'url en utilisant la méthode window.location.assign( ) comme ceci :

    window.location.assign( 'http://oontack.fr/tests/test.php?donnees=data );

    La page distante http://oontack.fr/tests/test.php reçoit les données, les traite, et tout marche encore une fois à merveille.

    Une chose cependant me gène. L'utilisateur qui est dirigé de la page courante (au moment de cliquer sur le bookmarklet) à la page http://oontack.fr/test/test.php perd la possibilité de revenir en arrière dans l'historique de navigation.
    Or si on s'en réfère à la documentation, le fait que j'utilise la méthode assign( ) de l'objet window.location, devrait donner la possibilité à l'utilisateur de revenir de la page de destination test.php à la page d'origine (au moment où où il a cliqué sur le bookmarklet). Cependant tout ce passe comme si j'avais utilisé la méthode replace( ) de l'objet window.location.
    La méthode assign( ) fonctionne pourtant correctement hors du contexte d'un bookmarklet insérant une balise script sur la page courante. Par exemple :

    javascript:window.location.assign( 'http://oontack.fr/tests/test.php?donnees=data' );

    Ici assign( ) fait ce qu'on attend d'elle et ne remplace pas la page courante dans l'historique de navigation par la page de destination mais y ajoute plutôt cette dernière.

    Ma question : quelqu'un peut-il m'expliquer ce comportement ?
    Et cerise sur le gâteau, quelqu'un peut-il me dire comment obtenir que l'historique de navigation ne soit pas écrasé comme dans mon exemple de bookmarklet ?

    PS --------------------------------------------------------------------
    Si le script du bookmarklet, plutôt que d'envoyer directement à la page test.php les données recueillies, crée un bouton sur la page courante et lui assigne le comportement window.location.assign( 'http://oontack.fr/test/test.php?donnees=data' );, laissant le soin à l'utilisateur de cliquer dessus 'pour envoyer à la main' les données vers la page de destination; la méthode assign( ) fonctionne comme attendu.

    Si le script du bookmarklet crée un bouton sur la page courante et lui assigne le comportement window.location.assign( 'http://oontack.fr/test/test.php?donnees=data' ), mais déclenche de lui même ce comportement ( exemple bouton.click( ); ); assign( ) ne fonctionne pas comme attendu.

    Pour information, j'ai tenté la chose suivante. C'est parfaitement tiré par les cheveux, mais bon.
    var redirection = new Function( 'url', 'window.location.assign( url );' );
    redirection( url );
    Mais assign( ) n'a toujours pas le fonctionnement attendu.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut Pas trouvé
    C'est la partie search (?donnees=data) de l'adresse qui fait merder l'historique.

    Un bookmarklet

    javascript:headElmt=document.getElementsByTagName('head')[0];var scriptElmt=document.createElement('script');scriptElmt.setAttribute('src','http://oontack.fr/tests/test_2.js');void headElmt.appendChild(scriptElmt);

    qui siblerait un fichier contenant simplement le code suivant ne fait pas merder l'historique de navigation.

    window.location.assign( 'http://oontack.fr/tests/test.php' );

    J'ai toujours pas trouvé la solution.

Discussions similaires

  1. surcharger window.location.reload
    Par aeled dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/01/2006, 17h48
  2. window.location dans une variable ?
    Par jpic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/12/2005, 17h24
  3. window.location href bizarre
    Par siddh dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/11/2005, 15h09
  4. Petit pb javascript ! window.location
    Par Atomikx dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2005, 11h06
  5. Problème de redirection avec window.location
    Par Kosti dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/11/2004, 18h31

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