2008-12-09 19 views
90

Estoy desarrollando una aplicación web. En él, tengo una sección llamada categorías que cada vez que un usuario hace clic en una de las categorías, un panel de actualización carga el contenido apropiado.¿Hay alguna manera de cambiar la barra de direcciones del navegador sin actualizar la página?

vez que el usuario hace clic en la categoría que quiero cambiar url barra de direcciones del navegador desde

www.mysite.com/products 

a algo así como

www.mysite.com/products/{selectedCat} 

sin actualizar la página.
¿Existe algún tipo de API de JavaScript que pueda usar para lograr esto?

Respuesta

3

No creo que esto sea posible (al menos cambiar a una dirección totalmente diferente), ya que sería un mal uso no intuitivo de la barra de direcciones, y podría promover ataques de phishing.

+0

En lugar de ser poco intuitivo, creo que no deberías poder hacer eso porque podría ser mal utilizado para los ataques de phishing. De todos modos, eso es +1. – OregonGhost

+0

Sí, eso solo se me ocurrió. No es Buena idea. Gracias OregonGhost. – Galwegian

+1

I * do * creo que es posible ... Mira Wikimapia ... A medida que arrastras el mapa, la URL cambia ... –

7

Creo que la manipulación directa de la barra de direcciones URL a un completamente diferente sin mover a esa URL no está permitido por razones de seguridad, si está satisfecho con él que es

www.mysite.com/products/# { selectedCat}

es decir, un enlace de estilo de anclaje dentro de la misma página, luego examine los diversos scripts de historial/"botón de retroceso" que ahora están presentes en la mayoría de las bibliotecas de JavaScript.

La mención del panel de actualización me lleva a conjeturar que está utilizando asp.net, en ese caso el control de la historia asp.net ajax es un buen lugar para comenzar

-1

Esto no se puede hacer de la manera que está diciendo eso. El método sugerido por somej.net es lo más cercano que puede obtener. En realidad es una práctica muy común en la era AJAX. Incluso Gmail usa esto.

31

Para agregar a lo que los chicos ya han dicho, edita la propiedad window.location.hash para que coincida con la URL que deseas en tu función onclick.

window.location.hash = 'category-name'; // address bar would become http://example.com/#category-name 
+0

¿hay alguna forma de cambiar la URL sin el símbolo '#' en la URL? –

-1

"window.location.hash"

como sugiere sanchothefat debe ser la única manera de hacerlo. Debido a todos los lugares que he visto esta característica, es todo el tiempo después de la # en la URL.

152

Con HTML5 se puede modificar la url sin recargar:

Si desea realizar una nueva entrada en la historia del navegador (es decir,botón de retroceso va a funcionar)

window.history.pushState('Object', 'Title', '/new-url'); 

Si lo que desea es cambiar la url sin ser capaz de volver

window.history.replaceState('Object', 'Title', '/another-new-url'); 

El objeto puede ser utilizado para el Ajax de navegación:

window.history.pushState({ id: 35 }, 'Viewing item #35', '/item/35'); 

window.onpopstate = function (e) { 
    var id = e.state.id; 
    load_item(id); 
}; 

Leer más aquí: http://www.w3.org/TR/html5-author/history.html

Una solución alternativa: https://github.com/browserstate/history.js

+4

+1 También tenga en cuenta; estos cambian la 'ruta 'y/o' cadena de consulta' en la URL; no pueden cambiar el protocolo, el dominio o el puerto (ya que eso sería un problema de seguridad como otros han señalado). La función 'hash' anterior puede cambiar el anclaje (o el identificador de fragmento) –

+2

que acaba de decir, en su ejemplo '/ item/35'}, hay un extra} agregó – Zhanger

+0

Al igual que una pregunta lateral, ¿hay alguna manera de habilitar estos ¿URL para luego indexar en Google? –

Cuestiones relacionadas