2011-08-07 40 views
7

No puedo obtener window.location.hash = location.hash para trabajar en Safari."window.location.hash = location.hash" no funciona en Webkit (Safari y Chrome)

Estoy usando javascript para envolver los contenidos de mi página con un DIV desplegable, ubicado debajo de la barra de navegación en mi página web. Como la ubicación de la barra de desplazamiento se restablece cuando se ejecuta el javascript, pierdo la ubicación del hash original que estableció la URL. Necesito volver a ubicar la ubicación de hash sin volver a cargar la página usando javascript, entonces estoy usando window.location.hash = location.hash. Funciona en IE8, Firefox y Opera, pero no funciona en Safari. (Asumiré Chrome, también, pero no lo he comprobado). ¿Alguna sugerencia?

Sugerencia: Me gusta jQuery.

+0

Definir "no funciona", por favor. –

+1

@Tomalak Por lo que puedo decir, esa línea de código nunca se ejecuta en Safari. (1) El contenedor javascript se ejecuta, restableciendo la ubicación de la barra de desplazamiento en la parte superior de la página. (2) Aparece una alerta, diciéndome que la función 'window ... hash' es lo siguiente que se ejecuta en la página ... y eso es todo. Nada más (pertinente) sucede. –

Respuesta

11

Webkit tiene dos singularidades que impiden window.location.hash = location.hash de trabajar normalmente.

  1. Webkit responde a window.location.href en lugar de window.location.hash (al igual que todos los otros navegadores lo hacen). Curiosamente, webkit todavía se puede leer la etiqueta de la URL hash usando location.hash
  2. Webkit ha documentado un error en el que el href location tiene que estar configurado en el mismo lugar dos veces antes de que el navegador va a ir a la nueva ubicación. Informe de error here.

Este código resolvió mi problema: (usando jQuery).

$(document).ready(function() { 
    gotoHASH() 
}; 

function gotoHASH() { 
    if (location.hash) { 
     if ($.browser.webkit == false) { 
      window.location.hash = location.hash; 
     } else { 
      window.location.href = location.hash; 
     } 
    } 
}; 
0

Establezca location.hash en otra cosa primero e instálelo de inmediato.

var t = window.location.hash; 
window.location.hash = "non-existant-id"; 
window.location.hash = t; 
+0

Sin cigarro. Tu código solo modificó la etiqueta hash URL. Nunca movió la página. –

0

Antes de JavaScript cambia la ubicación de hash original, conseguir la posición de desplazamiento utilizando

var st = $(window).scrollTop(). 

Cuando desea restaurar la posición de desplazamiento, utilice

$(window).scrollTop(st); 
+0

'var st = $ (window) .scrollTop()' ni siquiera establece la variable en Safari. Cuando ejecuto '$ (window) .scrollTop (st)', la consola me da un error indefinido variable. (Sin embargo, el código funciona en otros navegadores). –

4

que terminó con

window.location.hash = ""; 
window.location.hash = "myanchor"; 

Esto funcionó bien en todos los navegadores de escritorio que he probado en iOS y en Android y Chrome.

Cuestiones relacionadas