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.
Partager