Necesito modificar el hash, quite después de cierto tratamiento se lleva a cabo de modo que si el usuario actualiza no provocan que el proceso se ejecute de nuevo.

Esto funciona bien en FF, pero parece que IE se recarga cada vez que intento cambiar el hash. Creo que está relacionado con otras cosas que se carga en la página, aunque no estoy seguro. Tengo un iframe que carga (relacionado con el proceso), así como algunos de los scripts que están siendo recuperados en la ventana principal.

Me parece que no puede encontrar una buena manera de cambiar el hash después de todo la carga completa. Y, al mismo tiempo, ni siquiera soy positivo que está relacionada con la carga.

Cualquier idea sobre cómo resolver esto?

Más extraño comportamiento:
El hash es que viene de otra parte de la aplicación web a través de una redirección. He descubierto que si yo simplemente agregar el hash con la mano, añadiendo #myid a la url, no vuelve a cargar. No importa si entro en el hash en una página que ya ha cargado (añadiendo #myid a la ya existente url) o introduciendo la url en una nueva pestaña.

  • Similar a stackoverflow.com/questions/1985056/…
  • Puede usted por favor proporcione los pasos de reproducción? Tengo un sitio web utilizando escapado-fragmento de la Url (#!, también conocido como hash-bang) y soy incapaz de reproducir este error. Probado en IE9.0.8 y IE10RP.
InformationsquelleAutor aepheus | 2010-04-08

9 Comentarios

  1. 17

    Esto parece ser un error de Internet Explorer (probado con 7 y 8).

    Ventana de cambio.ubicación.hash no debe resultar en una recarga, y es común JavaScript técnica a utilizar el hash para mantener el estado.

    Si manualmente de carga de una página y cambiar el hash con JavaScript se va a trabajar.

    El problema es cuando se redirige a la página desde una ubicación diferente (es decir: el uso de encabezado HTTP «Ubicación»), a continuación, modificar el hash, el resultado será una recarga.

    Para evitar este error puede:

    1) Si usted puede controlar la redirección, usted puede reemplazar la Ubicación de la cabecera de HTML.

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

    2) si no, usted podría tratar de recargar la página cuando está cargado. Para evitar la recarga de bucle puede ser necesario establecer una 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"

    Obviamente el inconveniente es que la carga de la página de resultados en dos petición de la página & render, por lo que te gustaría que la recarga a ser una de las primeras cosas que la página no cuando se carga.

    • Me temo que la solución#2 se traducirá en un bucle si el usuario tiene las cookies desactivadas.
    • Este error ocurre en Windows Vista/Server 2008 con IE8, pero no en Windows 7 con IE8…
  2. 14

    @JarneCook parece ser de derecha es un error en el IE.

    Usted podría ser capaz de hacer:

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

    en la parte superior de la página. En circunstancias normales, este debe ser un no-op, pero si el usuario está usando IE y ha llegado a través de una redirección, la página se recarga, incluso antes de que el aviso de que ha cargado.

    • Esta es la mejor solución! Es decir comprueba la Referencia HTTP y en el caso de redirección, es falta. Por lo tanto, es decir, actualiza la página tan pronto como se ejecuta cuando la ventana.ubicación.hash es conjunto.
    • La mejor solución, gracias!
    • Esta solución me salvó el día. Muchas gracias @rjmunro, y IR AL INFIERNO IE !
    • Después de todo un día de lidiar con esta mierda de IE9 redirigir a mí, esto finalmente se fija!!! Gran solución!! Quiero darle a usted acerca de +50 en su rep
  3. 10

    El problema es que «El hash es que viene de otra parte de la aplicación web a través de una redirección.«.
    Si puedes usar javascript para redireccionar la url en el cliente como este:

    location.href = 'test1.aspx#testhash'

    va a estar bien !

    Así que este es el IE error: Cuando una aplicación web a través de una redirección, el navegador sólo puede ver la anterior url, por lo que cuando se modifica el location.hash, el navegador se ve un cambio de url, por lo que se actualiza la página.

  4. 1

    El problema similar existía en mi proyecto. Pero no podíamos usar los métodos descritos anteriormente, debido a que cuando IE actualiza una página, los datos cargados previamente se ha restablecido.
    Por lo tanto, usamos la función del navegador. Cuando usted haga clic en ‘a’ de la etiqueta, evento onClick que pasó en primer lugar y después del evento del navegador ‘href’ atributo para redireccionar. Cuando es decir, un uso href con hash para redireccionar, la recarga no existen. Así, usted puede utilizar evento onClick para invocar el procesamiento en el servidor(__doPostBack para asp.net por ejemplo) y cuando el procesamiento se ejecuta, el navegador usará ‘href’ atributo para redireccionar. Así, la nueva página no se vuelve a cargar.
    También puede utilizar window.location = yourNewLocationWithHash invocando después de que el procesamiento en el servidor.
    Espero que esta ayuda =)

  5. 1

    Se enfrenta a este problema, Como se sugiere en una de las respuestas, el problema fue sólo cuando un 302/301 redirección. Hash cambio de no volver a cargar si la página no era una redirección. Yo estaba redirigir el uso de PHP y no desea utilizar una cookie para detener la redirección.

    Más sobre esta cuestión, en algunos IE9 navegadores, trató de 5 IE9 navegadores, 4 se vuelve a cargar la página.

    Aquí es una revisión agregado esta en la sección de la cabeza :

    <!--[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]-->
  6. 0

    Aquí es una cruz-explorador de soluciones. Funciona en IE, Chrome, Safari, y FF (probado con las últimas versiones).

    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 ;

    Básicamente, que el apalancamiento de la consulta («?») cadena para activar la recarga de la página con hash. Lo que la primera línea no es checkes si no es nuestro «oro» de la cadena de consulta (yo uso «c» de la variable que representa «comentario»). Si la hay,

    1. la nueva dirección URL tendrá todo antes de que «c=»;
    2. a continuación, añade nuestro oro «c=» + un número aleatorio entre 0 y 10 + «#» + mi comentario id para que el navegador debe saltar cuando se vuelve a cargar.

    Si no hay ninguna,

    1. la nueva dirección URL tendrá todo lo anterior dirección URL que se utiliza para tener;
    2. si la dirección URL anterior ya contiene algunos otros de la cadena de consulta (algo después de «?»), agregar una consulta de datos anexados operador «&»;
    3. si no «?», a continuación, añadir;
    4. a continuación, va el arriba mencionado «oro» de la consulta.

    La razón por la que añada un número aleatorio para después de «?» es que después de la primera recarga hay algo que me gusta «?#comentarios-10». En este caso, el siguiente cambio a la dirección URL no volver a cargar la página, ya que el navegador entiende como un ancla para la instrucción de salto.

    Para forzar la recarga, tenemos que añadir algunos al azar cosa a la consulta de manera que la nueva dirección URL es diferente de la anterior.

    Esta solución funciona en todos los navegadores y se asegurará de que la recarga no se rompa la consulta existente. La única nota es para asegurarse de que su «oro» de la consulta del nombre de la variable es única.

    Espero que esto ayude.

  7. 0

    Teníamos el mismo problema.

    En nuestro caso consistió en una dirección URL http el cual fue redirigido a https por Apache. Desde la cadena después de que el símbolo nunca se pasa al servidor, se perdió.

  8. -3

    Si utiliza javascript para establecer el hash no el uso de una «#»

    window.location.hash = '#foo'; //IE will reload the page
    window.location.hash = 'foo'; //IE will set the hash but will not reload the page
    • No creo que esto funciona como crees que funciona.
  9. -5

    A mí me parece que si cambia el hash, que son, básicamente, el cambio de ubicación de la página, y entonces IE (o cualquier otro navegador) sería volver a cargar. ¿Cómo está usted tratando de hacer esto? window.location.hash = ""; ?

    Tal vez Firefox es sólo lo suficientemente inteligente como para ver lo que están haciendo y evitar la actualización.

    • La cosa acerca de hash es que no es considerado por el navegador como una pieza de la ubicación física, es sólo un cliente parte, no se envía a los servidores. No se supone que para volver a cargar la página en cualquier navegador, se supone que debe traer a un ancla en la página.
    • Bueno, yo sólo probé en IE8 y negado mi respuesta 🙂 — pongo un par de botones en una página. En uno, me la ventana.ubicación.hash a un valor de hacer clic en me envió a el ancla. En el otro botón de ventana de conjunto.ubicación.hash a «» (cadena vacía) – hacer clic en me envió de nuevo a la parte superior de la página. En ningún caso la página o desde el servidor. Por lo tanto, si usted publique el código donde se hace la obra, tal vez alguien va a detectar el problema.

Dejar respuesta

Please enter your comment!
Please enter your name here