2011-02-28 42 views
7

He buscado mucho para deshacerme de este problema en Internet pero no he podido encontrar una solución específica a pesar del problema que se discute en los detalles anteriormente.IFrame Botón Atrás

La consulta es simple. Mi javascript agrega dinámicamente un iframe a la página web (que muestra un formulario de comentarios). El problema es que, "después de responder", ahora cuando el usuario hace clic en el botón "Atrás" del navegador, el iframe en lugar de la ventana del navegador se ve afectado, es decir, el cuestionario se muestra de nuevo. Quiero que el botón de retroceso del navegador se comporte normalmente.

Este comportamiento es realmente molesto y tengo problemas para solucionarlo.

Estoy usando firefox.

Esperamos las respuestas. Por favor, infórmeme si debería dar más detalles.

Gracias,

Respuesta

3

Su forma tiene un botón de envío, que los mensajes de la página al servidor. El botón Atrás siempre enviará al usuario de vuelta al formulario independientemente de si usa un iframe o no. La forma ideal es notificar al usuario de una acción completada, en este caso agradecer al usuario los comentarios (usando un cuadro de alerta) y redirigir al usuario a la página de inicio o proporcionar un botón en la página que dice "Volver al inicio".

+0

de acuerdo con esto, cualquier cosa que cambie este comportamiento de volver lo haría más bien confundir al usuario. –

+0

Proveeré más contexto: el script es parte de una extensión que funciona en un sitio web de dominio público. Ya tengo un enlace "Volver a la página anterior" pero todavía quiero que el botón Atrás funcione como lo escribí en mi publicación. De alguna manera, quiero desacoplar o eliminar el historial de Iframe del historial del navegador, pero no estoy seguro de si puedo hacerlo. – VJune

+0

La única forma en que puede hacer eso es usar AJAX para publicar sus valores de formulario en el servidor. De esta forma, evitará una publicación posterior y el botón Atrás funcionará para llevarlo a la página anterior. Pero esto implica una buena cantidad de codificación de JavaScript para publicar datos en el servidor y luego ocultar los campos del formulario una vez que obtenga una respuesta válida. Usar jQuery para Ajax lo hará un poco más fácil para usted. Pero dudo si puede eliminar el historial del navegador. – Arun

3

Firefox y IE efectivamente actúan como usted mencionó, pero Chrome no, y creo que otros navegadores WebKit harían lo mismo. En Chrome, hacer clic en el botón Atrás lo llevará a donde desea ir (la URL anterior del cuadro principal). es decir, Chrome para no agregar cambios de URL de iframe en el historial del botón de retroceso.

Lamentablemente, no he encontrado ninguna manera de obligar a IE y FF a replicar esto, así que utilicé el enfoque de publicación AJAX sugerido anteriormente por Arun.

Aquí es mi fuente de marco flotante, que utilizan jQuery para enviar el formulario, y sustituir toda la página con el resultado de que la POST:

<form method="post" onsubmit="postForm(this);return false"> 
    ... 
</form> 

<script type="text/javascript"> 
function postForm(form) { 
    $.post(form.action, $(form).serialize(), postCompleted); 
} 
function postCompleted(data) { 
    $('html').html(data); 
} 
</script> 

Esto funciona en todos los navegadores; hacer clic en el botón Atrás lo enviará de regreso a la URL anterior vista por el usuario final, en lugar de la forma inicial cargada dinámicamente en el iframe.

3

Me encontré con el mismo problema: utilizo un iframe creado dinámicamente para mostrar una "ventana emergente" en mi página, cuyo SRC apunta a otra página que tiene un formulario y un botón de enviar. Después de enviar esa página, se utiliza una devolución de llamada JS para ocultar el iframe. Como explicó, esto provoca que se agregue una nueva entrada al historial (al menos en IE).

Pero descubrí que eliminando el elemento iframe del DOM (en lugar de ocultarlo) hace que se elimine la entrada del historial no deseado (probado en IE9)! Que es lo que el usuario esperaría en esa situación.

Se puede observar esto por sí mismo en IE9:

  1. Abrir el menú de botón de retroceso (haga clic con el botón de retroceso): sólo tiene una entrada para la página actual
  2. , pulse enviar en el iframe = > el menú del botón posterior muestra una entrada extra para el iframe
  3. Retire el marco flotante del DOM => el menú de botón de retroceso ya no muestra que la entrada
+0

También probé trabajando en IE8 y Firefox 10. –

+0

Me encontré con esto, y para refinar esta respuesta aún más, he encontrado que si no especifico el src del iframe, hasta después de que se carga la página principal, la extraña vuelta comportamiento no ocurre. –

Cuestiones relacionadas