Różnica między window.location.href, window.location.replace i window.location. assign


129

Jaka jest różnica pomiędzy

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

Czytałem na wielu forach, że window.location.assign()po prostu podmienia aktualną historię sesji, a co za tym idzie przycisk wstecz przeglądarki nie będzie działał. Jednak nie jestem w stanie tego odtworzyć.

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
Możesz zobaczyć starszy post w url: stackoverflow.com/questions/1865837/ ... mam nadzieję, że będzie pomocny

Odpowiedzi:


165

Robią to samo:

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

Po prostu przechodzą do nowego adresu URL. Z replacedrugiej strony metoda przechodzi do adresu URL bez dodawania nowego rekordu do historii.

Zatem to, co przeczytałeś w tych wielu formach, nie jest poprawne. assignSposób nie dodać nowy rekord w historii.

Źródła: http://developer.mozilla.org/en/window.location


1
Bardzo dziękuję za odpowiedź. Bardzo mi pomogło w rozwiązaniu problemu z przyciskiem Wstecz w przeglądarce.
santosh kumar patro

@blunderboy: To i tak najlepsza odpowiedź przez osunięcie się ziemi, więc to niczego nie zmieni.
BoltClock

Więc o co chodzi assign()? Z tej odpowiedzi i dokumentów wygląda to identycznie jak location = ....
Mitya

11

Część dotycząca niemożności użycia przycisku Wstecz jest często błędną interpretacją. window.location.replace (URL) wyrzuca górny JEDEN wpis z listy historii stron, zastępując go nowym wpisem, aby użytkownik nie mógł łatwo wrócić do JEDNEJ konkretnej strony internetowej. Ta funkcja NIE czyści całej listy historii stron, ani nie sprawia, że ​​przycisk Wstecz nie działa.

(ŻADNA funkcja ani kombinacja parametrów, o których wiem, nie mogą zmienić lub nadpisać wpisów na liście historii, których absolutnie nie jesteś właścicielem - przeglądarki generalnie narzucają to ograniczenie bezpieczeństwa, po prostu nie definiując żadnej operacji, która mogłaby w ogóle wpłynąć na dowolny wpis inny niż do góry jeden na liście historii str. I boję się pomyśleć, co rodzaju nikczemnych rzeczy złośliwego oprogramowania może zrobić, jeśli taka funkcja istnieje.)

Jeśli naprawdę chcesz, aby przycisk Wstecz nie działał (prawdopodobnie nie był „przyjazny dla użytkownika”: pomyśl jeszcze raz, jeśli naprawdę chcesz to zrobić), „otwórz” zupełnie nowe okno. (Można „open” popup, że nawet nie ma przycisku „Wstecz” zbyt ... ale wyskakujące okienka nie są bardzo popularne tych dni :-) Jeśli chcesz zachować swoją stronę pokazując Nieważne co robi użytkownik ( znowu "przyjazność dla użytkownika" jest wątpliwa), skonfiguruj program obsługi window.onunload, który po prostu przeładowuje twoją stronę od nowa za każdym razem czysto od samego początku.


4
„ŻADNA funkcja ani kombinacja parametrów, o których wiem, mogą zmienić lub nadpisać wpisy listy historii” ... Witamy w HTML5
SpYk3HH

6
Brak możliwości zmiany lub zastąpienia wpisów historii przeglądarki, których nie posiadasz, jest regułą bezpieczeństwa, która istnieje od dawna . HTML5 po prostu kontynuuje tę regułę.
Chuck Kollars

Przegapiłeś sens lub raczej sarkazm. Wyszukaj html5 i historię
SpYk3HH
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.