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 :

IE 7 : javascript location.hash bug?


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut IE 7 : javascript location.hash bug?
    Bonjour à tous,

    actuellement en train de travailler sur un projet web en entreprise, je rencontre quelques difficultés en javascript sur le navigateur IE 7 sur lequel doit fonctionner mon application.

    Afin de vous faire partager mon problème, j'ai écrit une petite page :

    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
    <html>
        <head>
            <title>IE Anchor Test</title>
            <script type="text/javascript">
            function test()
            {
                window.setInterval(function ()
                    {
                        document.getElementById('window.location.hash').innerHTML = window.location.hash;
                        document.getElementById('window.location.href').innerHTML = window.location.href;
                        document.getElementById('self.location.href').innerHTML = self.location.href;
                        document.getElementById('top.location.hash').innerHTML = top.location.hash;
                        document.getElementById('window.parent.location.hash').innerHTML = window.parent.location.hash;
                    }, 100);
            }
            </script>
        </head>
        <body onload="test()">
            <table border="1">
                <tr>
                    <td>window.location.hash</td>
                    <td id="window.location.hash"></td>
                </tr>
                <tr>
                    <td>window.location.href</td>
                    <td id="window.location.href"></td>
                </tr>
                <tr>
                    <td>self.location.href</td>
                    <td id="self.location.href"></td>
                </tr>
                <tr>
                    <td>top.location.hash</td>
                    <td id="top.location.hash"></td>
                </tr>
                <tr>
                    <td>window.parent.location.hash</td>
                    <td id="window.parent.location.hash"></td>
                </tr>
            </table>
            <br /><hr /><br />
            <a href="#test1">test1</a><br />
            <a href="#test2">test2</a><br />
            <div id="test1"></div>
            <div id="test2"></div>
        </body>
    </html>
    On a donc, 2 div vides en bas de page avec les id "test1 et test2"
    2 liens d'ancre menant vers les div en question, un tableau qui affichera des informations, alimenté par ma fonction js "test" lancée via un onload.

    Comme vous pouvez le voir, toutes les 100 millisecondes des informations JS sont affichées dans le tableau. Ces informations sont :

    window.location.hash
    window.location.href
    self.location.href
    top.location.hash

    La démarche à suivre :

    - Cliquez sur le lien test1 => l'ancre change dans la barre d'adresse, les infos dans le tableau sont correctes
    - Cliquez sur le lien test2 => l'ancre change dans la barre d'adresse, les infos dans le tableau sont correctes
    - Appuyez sur le bouton retour du navigateur => l'ancre change dans la barre d'adresse, les infos dans le tableau sont incorrectes!

    En effet, je m'attends à retrouver "#test1" dans window.location.hash, et bien non je garde "#test2". Sous firefox 3.6.8 / 3.6.9 pas de soucis.

    Malheureusement, les 3000 employés de la boite sont sous IE 7 et pas question de changer, je cherche donc une solution à mon problème.

    Initialement, le but de cette manipulation était de détecter un changement au niveau de l'ancre, sur IE 8 ou firefox (version ?) un événement onhashchange existe. Sous IE 7, je pensais pouvoir surveiller la valeur de window.location.hash, mais apparemment cette propriété n'est pas mise à jour correctement.

    Après avoir cherché des solutions alternatives 2 jours, je finis par me retourner vers vous.

    Que pensez vous de ce problème? Est-ce pour vous un bug au niveau d'IE 7?
    Voyez vous une solution possible pour détecter un changement d'ancre dans le cas de la navigation dans l'historique d'IE 7?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    sans doute un souci de cache et d'interprétation du location href
    je pense que ceci peut mettre tout le monde d'accord ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <a href="#test1" onclick="self.location.href=self.location.href.replace(/\?.*$/,'')+'?'+new Date().getMilliseconds()+'#'+this.href.replace(/.*#/,'');return false;">test1</a><br />
    <a href="#test2" onclick="self.location.href=self.location.href.replace(/\?.*$/,'')+'?'+new Date().getMilliseconds()+'#'+this.href.replace(/.*#/,'');return false;">test2</a><br />

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Bonjour,

    Je viens de jeter un oeil, le problème c'est que là on génère des url de type

    donc avec un paramètre GET, et là le navigateur va recharger la page, ce que je cherche à éviter.

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    avec # de toute façon IE7 recharge la page

    pour n'avoir aucun rechargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            <a href="#test1" onclick="self.location.hash='#test1'; return false;">test1</a><br />
            <a href="#test2" onclick="self.location.hash='#test2'; return false;">test2</a><br />

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Pour moi la page n'est pas rechargé, en reprenant mon code initial et en remplaçant le body par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="test(); alert(1)">
    Je n'ai pas d'alert lors de la navigation sur les ancres, pas même lorsque j'utilise les fonctions "avancer" et "reculer" du navigateur.

    Il s'agit d'une IE 7.0.6001.18000 sur un windows vista professionel SP1

Discussions similaires

  1. soucis avec location.hash et ie
    Par rapanui dans le forum Général JavaScript
    Réponses: 28
    Dernier message: 22/07/2009, 15h56
  2. DomTabs et location.hash
    Par samarkande dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 09/02/2009, 15h53
  3. location.hash avec Safari et Konqueror
    Par wrmmv dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/10/2005, 13h59
  4. Bug d'IE concernant le Javascript ?
    Par becks dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/06/2005, 14h35
  5. Petit pb javascript ! window.location
    Par Atomikx dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2005, 11h06

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