2012-02-22 11 views
5

La siguiente idea: https://gist.github.com/1876791 (tomada de la demo en this question) es un ejemplo muy simple de uso de window.onbeforeunload en js.Safari se mantiene "cargando" cuando window.onbeforeload devuelve false

El problema que tenemos es la siguiente (sucede con Safari 5.1.3 y no reciente versión Chrome):

  1. Visita esta página: http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm
  2. Haga clic en uno de los enlaces, se le recibe una alerta preguntándole si realmente desea abandonar esta página
  3. Haga clic en "Permanecer en la página"
  4. Recargue la página usando cmd-R. Se le preguntará en otro momento si realmente desea abandonar la página
  5. Haga clic en "Permanecer en la página".
  6. Safari se mantiene en estado de "carga", con la barra de progreso mostrando como si fuera a cargar la página siguiente.

¿Es esto un error de Safari? ¿Hay alguna forma de eludir este problema?

+0

Es extraño, porque incluso intentar window.stop() no hará que Safari deje de pretender que está refrescando la página. Supongo que es un error, intenté informarlo a [chicos de webkit] (http://www.webkit.org/quality/ reporting.html) – Roberto

+0

También ocurre si actualizo más de una vez.No necesito hacer clic en uno de los enlaces. Estoy ejecutando Safari 5.1.2 en una pc. –

Respuesta

1

yo era capaz de reproducir este problema, incluso mientras se omiten pasos de OP 2 y 3. Cualquier forma de exposiciones de recarga esta cuestión. Pasos minimalistas para reproducir:

  1. Visita the page in question.
  2. Hit reload.
  3. Haga clic en el botón "Permanecer en la página".

El progreso de la carga se preajusta visualmente justo después de la recarga y permanece así durante toda la vida del diálogo de confirmación (aparentemente en un esfuerzo por comunicar el tipo "colgando sobre el acantilado" maduro de la situación ;) Sin embargo:

  • Cuando diálogo desaparece con el botón "Stay en la página", que sale de la X símbolo y parando en el progreso de carga todavía comprometido y congelado en algún lugar alrededor de la marca del 10%.
  • Esta "carga" NO se puede cancelar por ningún medio (teclado, botón, secuencia de comandos).
  • La pestaña de red en Web Inspector afirma que NO se está cargando.

Esto realmente parece un error de la UI de Webkit/Safari: parece que no se desactiva la barra de progreso en las condiciones de permanencia en la página. Lo mejor sería reportarlo al Webkit team o, como lo experimentas en Safari, tal vez el Safari team sería mejor.

0

Por favor, vea esta página->https://developer.mozilla.org/en/DOM/window.onbeforeunload

Debe controlar el evento. El ejemplo en la página funciona bien. Aquí está el código:

window.onbeforeunload = function (e) { 
    e = e || window.event; 

    // For IE and Firefox prior to version 4 
    if (e) { 
    e.returnValue = 'Any string'; 
    } 

    // For Safari 
    return 'Any string'; 
}; 
+0

En primer lugar, estaba dudando de su respuesta. Entonces pensé que agregar '(e)' en vez de '()' funcionaría. Pero esta página exacta https://gist.github.com/1960398 (tomando exactamente su código js) muestra el error del que estoy hablando en mi pregunta. – rpechayr

+0

no era 'mi código js'. Di la fuente como un enlace allí si pudieras haberlo comprobado. – zipizip

+0

Sí, también encontré este código. Perdón por el comentario que no estaba claro. – rpechayr

Cuestiones relacionadas