trigger tag site name manager keywords google form event ajax http gmail

ajax - site - tag manager form submission trigger



¿Cómo Gmail hace que IE Back funcione sin actualización? (2)

Gmail usa # cuando hace clic en un correo para distinguir la página (acción + Ajax). http://mail.google.com/mail/#inbox/1238e709e37a1394

Encontré: ¿ Google usa # en lugar de buscar? en la URL. ¿Por qué?

En FF o Chrome, puede usar Adelante y Atrás sin actualizar entre esas URL: http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/ MyPage.aspx # 3

Pero en IE la página se actualiza y no cuenta los parámetros después de # cuando se realiza una acción inversa.

¿Cómo Gmail hace que la magia pase?



Puedo darle una respuesta a esto, porque he enfrentado y resuelto este problema.

Hay algunos conceptos para entender aquí primero:

  1. javascript no puede alterar el historial del navegador directamente.
  2. siempre que la URL base de un iframe en la página cambia, el historial se actualiza. (Pero esto tiene algunas peculiaridades con diferentes navegadores).
  3. la url tiene una parte "hash": por ejemplo, en la URL http://mail.google.com/mail#inbox , #inbox es la parte hash. Llamémoslo el "hash". así que http://mail.google.com/mail será nuestra "URL base".

El historial de seguimiento de GMail se realiza principalmente mediante trucos basados ​​en este "hash".

Por lo tanto, algunos conceptos más:

  1. cuando la URL en la barra de direcciones cambia, el historial se actualiza (la URL anterior entra en el historial)
  2. cuando se cambia la URL base, la página se vuelve a cargar.
  3. cuando la parte de hash de la URL cambia sin cambiar la URL base, la página no se vuelve a cargar.

Entonces, cuando pasas de http://mail.google.com/mail#inbox a http://mail.google.com/mail#sent , la página no se actualiza .

Ahora, si GMail obtuviera una notificación de evento cuando se modificara el hash, gmail podría tomar medidas basadas en eso. Desafortunadamente, no hay eventos DOM que puedan ayudarnos a capturar acciones del historial. Entonces, en cambio (esta es la parte que muestra cómo superé el problema), ejecutamos un bucle infinito que verifica los cambios en el hash. Si observa un cambio, entonces detectamos un clic en el botón "atrás" o "adelante" del navegador.

Al resolver esto, hice una herramienta útil: el analizador de URL . Puede analizar los parámetros GET en la URL, así como los parámetros codificados en el hash. ¡Dale una oportunidad a la demostración!

¡Aclamaciones!

Acerca de este problema en IE: no me di cuenta de que esta solución basada en ''hash'' no funciona en IE (desarrollador de linux pobre y antiguo).

Pero para IE, puede usar un iframe oculto, y usar su propiedad "url afecta el historial" para implementar el historial. Sé que esta declaración carece de detalles, pero eso se debe a mi propia falta de experiencia con IE.

Voy a probar esta solución, y seguimiento :)

Encontré una gran cantidad de enlaces en Internet, que hacen implementaciones adecuadas de la historia utilizando iframes / ubicación hash. No tuve la paciencia para desenterrar las diferencias entre la interfaz de iframe en varios navegadores.

Supongo que preferiría el plugin jquery . YUI también tiene un gerente de historia.

¡Aclamaciones!