Autor Tema: [Tutorial] HTML5 + Js pushState() - cambiar URL sin recargar  (Leído 5211 veces)

Desconectado nmartin021

  • PHPero Avanzado
  • ****
  • Mensajes: 250
  • Karma: 9
    • Ver Perfil
[Tutorial] HTML5 + Js pushState() - cambiar URL sin recargar
« en: 26 de Noviembre de 2011, 23:17:53 pm »
Hola!

Un dia estaba en Facebook y, al cambiar de pagina, me di cuenta de que el header (la barra azul de arriba) ni siquiera parpadeaba -no recargaba-, pero la url si cambiaba, me puse a buscar, y encontré la API que trae HTML5 -window.history- para que los botones de atrás y adelante funcionen bien y que además se puedan quitar los hashtags y que parezca más real...

Y como no había ningún tutorial que lo explique bien, decidí poner uno aquí, así nos vamos introduciendo en el mundo de HTML5 y todas sus novedades.



Funciones de la API:
pushState(data, title, url);crea una entrada en el historial del navegador. parametros: data: información que se pasa a window.onpopstate, puede servir para pasar información como el referrer (url de la que vienes)...
title: aquí va el nuevo titulo de la página
url: la nueva url a mostrar (no se puede cambiar el host por seguridad)
replaceState(data, title, url);hace lo mismo que pushState(), solo que este reemplaza los datos de la entrada actual, es decir, modifica las que se han guardado al entrar (o al usar pushState()) y no crea entradas nuevas



Ejemplo:
Código: [Seleccionar]
<a href="/perfil?nick=Phperos" onclick="go_to(this.href, this.data);return false;" data="nick=Phperos;id=2">Ir al perfil de @Phperos</a>
<script>
function go_to(url, data){
data = data.split(';'); // separar datos
var temp = {}, add; // creamos una variable en la que guardar los datos, por ejemplo temp['nick'], y otra para uso interno del for
for(var i=0;i<data.length;i++){
add = data[i].split('=');
temp[add[0]] = add[1];
} // un for para generar variables como data['nick'] o data['id']
data = temp;
delete temp;
delete add;
history.pushState({ nick: data['nick'], id: data['id'] }, 'Perfil de ' + data['nick'], url);
}
window.onpopstate = function(data){
var nick = data.nick, id = data.id;
/* tomar valores por ajax: archivo.php?id=nick&id=id */
document.getElementById('perfil').innerHTML = respuesta_ajax;
};
</script>

Así, ya podemos cambiar de perfil en perfil, cambiando la url y sin recargar la página.

Si se le echa imaginación, se puede lograr lo que hizo facebook: cambiar todas las urls sin recargar ni una sola vez la página. Con eso, ya tienes varias ventajas: puedes hacer un chat, ya que como no se recarga la página, el chat no tiene que volver a cargar y, por lo tanto, no tendrá que volver a cargar y desconectar al usuario y cargarlo de  nuevo y, así perfeccionar tu script.

Espero que os sirva...

...y que IE vaya agregando todo lo que sea posible de CSS3 y HTML5, ya que con HTML5 y CSS3 se consiguen crear aplicaciones web a nivel de las de escritorio... Un ejemplo es el <input type="range" /> - crea un slider muy util para los usuarios y aún más útil para los programadores, ya que es el modo más fácil de cambiar un valor sin ni siquiera tocar el teclado.

Comunidad PHPeros

[Tutorial] HTML5 + Js pushState() - cambiar URL sin recargar
« en: 26 de Noviembre de 2011, 23:17:53 pm »

Desconectado ferdi342

  • PHPero Experto
  • *****
  • Mensajes: 734
  • Karma: 8
  • Sexo: Masculino
  • Gúgol
    • Ver Perfil
    • Google - La solución a todo
Re:[Tutorial] HTML5 + Js pushState() - cambiar URL sin recargar
« Respuesta #1 en: 28 de Noviembre de 2011, 18:58:01 pm »
Interesante tutorial! k+.

Encuentro muy interesante el HTML 5, me pondré a mirarlo y practicar.
A veces hay que dejar terminar cosas buenas para que empiecen mejores, How I Met Your Mother

Desconectado AlejoSketch

  • PHPero Avanzado
  • ****
  • Mensajes: 339
  • Karma: 12
  • Sexo: Masculino
  • Aprendiendo algo nuevo cada día!
    • Ver Perfil
Re:[Tutorial] HTML5 + Js pushState() - cambiar URL sin recargar
« Respuesta #2 en: 28 de Noviembre de 2011, 19:56:31 pm »
Vaya! pero si yo me preguntaba lo mismo, "¿como hace para 'cargar' tan rápido?". muy interesante y si, habrá que mirar más acerca de HTML5  :) +k


Desconectado nmartin021

  • PHPero Avanzado
  • ****
  • Mensajes: 250
  • Karma: 9
    • Ver Perfil
Re:[Tutorial] HTML5 + Js pushState() - cambiar URL sin recargar
« Respuesta #3 en: 28 de Noviembre de 2011, 22:01:00 pm »
Interesante tutorial! k+.

Encuentro muy interesante el HTML 5, me pondré a mirarlo y practicar.
Gracias por el k+, y sí, HTML5 es muy interesante ya que ofrece novedades que reemplazan el uso de librerías como jQuery o prototype, ya que, por ejemplo, se pueden usar querySelector y querySelectorAll en vez de usar Sizzle de jQuery para usar selectores CSS3 en Javascript que, por cierto, son mucho más rápidos por ser nativos del navegador.
Vaya! pero si yo me preguntaba lo mismo, "¿como hace para 'cargar' tan rápido?". muy interesante y si, habrá que mirar más acerca de HTML5  :) +k
Gracias por el k+ :D Y sí, yo también me rompía la cabeza preguntandome cómo lo hacían :P