emplacement javascript.rafraîchissement du haschisch en IE

je dois modifier le hachage, le supprimer après que certains traitements ont lieu de sorte que si l'utilisateur rafraîchit, ils ne causent pas le processus de fonctionner à nouveau.

cela fonctionne très bien en FF, mais il semble QU'IE se recharge à chaque fois que j'essaie de changer le hachage. Je pense qu'il est lié à d'autres choses qui se chargent sur la page, bien que je ne suis pas certain. J'ai une iframe que les charges liées au processus) ainsi que quelques scripts qui doivent encore être récupérées par le parent fenêtre.

Je n'arrive pas à trouver un bon moyen de changer le hachage une fois le chargement terminé. Et, en même temps, Je ne suis même pas certain que cela soit lié au chargement.

avez-vous des idées pour résoudre ce problème?

comportement plus étrange: Le hachage est venue d'ailleurs, dans l'application web via une redirection. J'ai trouvé que si j'ajoute simplement le hachage à la main, en ajoutant #myid à l'url, il ne se recharge pas. Cela n'a pas d'importance si j'entre le hachage sur une page qui a déjà chargé (ajout de #myid à l'url déjà existante) ou en saisissant l'url complète dans un nouvel onglet.

24
demandé sur aepheus 2010-04-08 21:53:42
la source

9 ответов

ceci semble être un bug avec Internet Explorer (testé avec 7 et 8).

Changement de fenêtre.emplacement.le hachage ne doit pas donner lieu à un rechargement, et C'est une technique JavaScript courante d'utiliser le hachage pour maintenir l'état.

Si vous manuellement chargez une page et changez le hachage en utilisant JavaScript il fonctionnera.

le problème est quand vous êtes redirigé vers la page à partir d'un emplacement différent (c.-à-d. en utilisant L'en-tête HTTP "Location"), puis la modification du hachage se traduira par un rechargement.

Pour contourner ce bogue, vous pouvez:

1) si vous pouvez contrôler la redirection, vous pouvez remplacer l'en-tête Location par du HTML.

<html>
<head>
    <meta http-equiv="refresh" content="0; url=__REDIRECT_LOCATION__">
    <script>window.location = "__REDIRECT_LOCATION__";</script>
</head>
</html>

2) si non, vous pouvez essayer de recharger la page quand il est chargé. Pour éviter une boucle de recharge, vous devrez peut-être configurer un cookie.

window.location = window.location; // window.location.reload() didn't work.

In pseudo code: 

// if is Internet Explorer
//      if ( cookie "reloadPerformed" is not set )
//          set cookie "reloadPerformed" = "1"
//          reload page
//      else 
//          clear cookie "reloadPerformed"

l'inconvénient évident est que le chargement de la page donne deux pages request & render, donc vous voudrez que le rechargement soit l'une des premières choses que la page fasse quand elle se charge.

17
répondu Jarne Cook 2010-07-20 07:08:26
la source

@JarneCook semble être de droite - c'est un bug sous IE.

Vous pourriez être en mesure de simplement faire:

<script type="text/javascript">
  window.location.hash = window.location.hash;
</script>

en haut de votre page. Dans des circonstances normales, cela devrait être une No-op, mais si L'utilisateur utilise IE et est arrivé via une redirection, la page se rechargera avant même qu'ils remarquent qu'elle a été chargée.

14
répondu rjmunro 2017-05-23 15:33:35
la source

Le problème est que "Le hachage est venue d'ailleurs, dans l'application web via une redirection.". Si vous utilisez javascript pour rediriger l'url dans le client comme ceci:

location.href = 'test1.aspx#testhash'

ce sera ok !

donc c'est le bug IE: quand une application web via une redirection, le navigateur ne peut voir que l'url prev, donc quand vous modifiez le location.hash, le navigateur voit un changement d'url, donc rafraîchit la page.

10
répondu 张小生 2010-10-27 12:05:27
la source

le même problème existait dans mon projet. Mais nous ne pouvions pas utiliser les méthodes décrites ci-dessus, parce que quand IE rafraîchissait une page, les données préchargées étaient réinitialisées. Ainsi, nous avons utilisé la fonctionnalité du navigateur. Lorsque vous cliquez pour 'a' tag, l'événement onClick est arrivé en premier et après le navigateur d'événement utiliser l'attribut 'href' pour la redirection. Quand IE utilise href avec du hash pour la redirection, le rechargement n'existe pas. Ainsi, vous pouvez utiliser onClick event pour invoquer le traitement côté serveur (__doPostBack pour asp.net par exemple) et quand le traitement sera exécuté, le navigateur utilisera l'attribut 'href' pour la redirection. Ainsi, la nouvelle page ne sera pas rechargée. Vous pouvez également utiliser window.location = yourNewLocationWithHash invocation après traitement côté serveur. J'espère que cela aide =)

1
répondu Dmitry 2011-02-04 18:02:51
la source

faisait face à cette question, comme suggéré dans l'une des réponses, la question était seulement quand une redirection 302/301. Le changement de hachage ne se recharge pas si la page n'était pas une redirection. Je redirigeais en utilisant PHP et je ne voulais pas utiliser un cookie pour arrêter la redirection.

plus sur cette question était là dans certains navigateurs IE9 ainsi, essayé 5 navigateurs IE9, 4 rechargé la page.

Voici une correction ajoutée dans la section head:

<!--[if lt IE 10]>
    <script type="text/javascript">
        if(window.location.hash.replace('#','').length > 0
            && window.location.hash.search('stopredirectioninie') == -1)
        {
            window.location.href = window.location.href+'&stopredirectioninie';
        }
    </script>
<![endif]-->
1
répondu Rishabh 2013-01-07 16:24:05
la source

Voici une solution de navigation croisée. Fonctionne en IE, Chrome, Safari, et FF (essayé avec les dernières versions).

var pos = location.href.indexOf('c=');
location = (pos < 0 ?
                    location + (location.href.indexOf('?') < 0 ? '?' : '&')
                    : location.href.substring(0, pos))
           + 'c=' + Math.floor(Math.random()*11) + '#' + comment_id ;

En Gros, Je démultiplie la requête ("?"chaîne de caractères de déclencher le rechargement de la page avec de hachage. Ce que fait la première ligne est de vérifier s'il y a notre chaîne de requête "golden" (j'utilise la variable "c" qui signifie "commentaire"). Si il y a,

  1. la nouvelle URL, ce sera tout ce qui précède que "c=";
  2. puis ajoute notre or "c=" + un nombre aléatoire entre 0 et 10 + " # " + mon id de commentaire auquel le navigateur doit sauter lors du téléchargement.

Si il n'y est pas,

  1. la nouvelle URL auront tout vieux URL utilisée;
  2. si L'ancienne URL contient déjà une autre chaîne de requête (quelque chose après "?"), ajouter une requête ajout de l'opérateur "&";
  3. si non "?"puis l'ajouter;
  4. ensuite va la requête "d'or" mentionnée ci-dessus.

la raison pour laquelle j'ajoute un nombre aléatoire après "?"c'est qu'après le premier rechargement, il est quelque chose comme "?# comment-10". Dans ce cas, le prochain changement à L'URL ne rechargera pas la page, puisque le navigateur le comprend comme une instruction de saut d'ancre.

pour forcer le rechargement, nous avons besoin d'ajouter quelque chose de Aléatoire à la requête pour que la nouvelle URL soit différente de la précédente.

Cette solution fonctionnera sur tous les navigateurs et veillera à ce que le rechargement ne brise pas la requête existante. La seule remarque: est à assurez-vous que votre nom de variable de requête" d'or " est unique.

Espérons que cette aide.

0
répondu Eye 2012-01-19 08:28:35
la source

Nous avons eu le même problème.

dans notre cas, il s'agissait d'une URL http redirigée vers https par Apache. Comme la chaîne après le signe de hachage n'est jamais passée au serveur, elle s'est perdue.

0
répondu jan.vdbergh 2014-05-07 16:19:41
la source

Si vous utilisez javascript pour le hachage n'utilisez pas de "#"

window.location.hash = '#foo'; //IE will reload the page
window.location.hash = 'foo'; //IE will set the hash but will not reload the page
-3
répondu K.Rijpstra 2010-05-31 13:34:06
la source

il me semble que si vous changez le hachage, vous changez fondamentalement l'emplacement de la page, et donc IE (ou n'importe quel navigateur) rechargerait. Comment essayez-vous de faire cela? window.location.hash = "";?

peut-être que Firefox est juste assez intelligent pour voir ce que vous faites et éviter le rafraîchissement.

-5
répondu Ray 2010-04-08 22:08:09
la source