Diferencia entre window.location.href, window.location.replace y window.location.assign


129

Cuál es la diferencia entre

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

Leí en muchos foros que window.location.assign()simplemente reemplaza el historial de sesión actual y, por lo tanto, el botón de retroceso del navegador no funcionará. Sin embargo, no puedo reproducir esto.

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>

1
Puede ver una publicación anterior en la URL: stackoverflow.com/questions/1865837/ ... espero que sea útil

Aquí hay una mejor explicación: stackoverflow.com/a/847130/96656
Mathias Bynens

Respuestas:


165

Estos hacen lo mismo:

window.location.assign(url);
window.location = url;
window.location.href = url;

Simplemente navegan a la nueva URL. Por replaceotro lado, el método navega a la URL sin agregar un nuevo registro al historial.

Entonces, lo que ha leído en esas muchas formas no es correcto. El assignmétodo agrega un nuevo registro al historial.

Referencia: http://developer.mozilla.org/en/window.location


1
Muchas gracias por la respuesta. Me ayudó mucho a resolver el problema del botón de retroceso del navegador.
santosh kumar patro

@blunderboy: De todos modos, es la mejor respuesta por un deslizamiento de tierra, así que eso no cambiaría nada.
BoltClock

Entonces, ¿de qué sirve assign()? De esta respuesta y los documentos, suena idéntico a location = ....
Mitya

11

La parte de no poder usar el botón Atrás es una mala interpretación común. window.location.replace (URL) elimina la UNA entrada superior de la lista del historial de la página, sobrescribiéndola con la nueva entrada, de modo que el usuario no pueda volver fácilmente a esa ÚNICA página web en particular. La función NO borra toda la lista del historial de la página, ni hace que el botón Atrás no sea completamente funcional.

(Función NO, ni combinación de parámetros que yo sepa cambio puede o sobrescribir entradas de la lista historia que usted no es dueño de absolutamente ciertos navegadores - generalmente impelement esta limitación de seguridad simplemente ni siquiera definir cualquier operación que podría parecer a todos afectan cualquier entrada que no sea el primero en la lista del historial de la página. Me estremezco al pensar qué tipo de cosas cobardes podría hacer el malware si existiera tal función).

Si realmente desea que el botón Atrás no sea funcional (probablemente no sea "fácil de usar": piense de nuevo si eso es realmente lo que desea hacer), "abra" una ventana nueva. (También puede "abrir" una ventana emergente que ni siquiera tiene un botón "Atrás" ... pero las ventanas emergentes no son muy populares en estos días :-) Si desea que su página se muestre sin importar lo que haga el usuario ( una vez más, la "facilidad de uso" es cuestionable), configure un controlador window.onunload que simplemente recargue su página de nuevo clara desde el principio cada vez.


4
'NINGUNA función ni combinación de parámetros que conozca puede cambiar o sobrescribir las entradas de la lista del historial' ... Bienvenido a HTML5
SpYk3HH

6
La imposibilidad de cambiar o sobrescribir las entradas del historial del navegador que no posee es una regla de seguridad que existe desde hace mucho tiempo. HTML5 simplemente continúa esa regla.
Chuck Kollars

Te perdiste el punto o más bien el sarcasmo. Busque html5 e historial
SpYk3HH
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.