Різниця між window.location.href, window.location.replace і window.location.assign


128

Яка різниця між

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

Я читав на багатьох форумах, що window.location.assign()просто замінює поточну історію сеансів, і, отже, кнопка повернення браузера не буде працювати. Однак я не в змозі відтворити це.

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
Ви можете побачити стару запис в URL: stackoverflow.com/questions/1865837 / ... сподіваюся , що це буде корисно

Ось краще пояснення: stackoverflow.com/a/847130/96656
Матіас Bynens

Відповіді:


165

Вони роблять те саме:

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

Вони просто переходять до нової URL-адреси. replaceМетод з іншого боку , переходить до URL - адресою , без додавання нового запису в історії.

Отже, те, що ви прочитали в цих багатьох формах, не є правильним. assignМетод дійсно додає новий запис в історії.

Довідка: http://developer.mozilla.org/uk/window.location


1
Дякую за відповідь. Це мені дуже допомогло вирішити проблему з кнопкою повернення браузера.
патрон santosh kumar

@blunderboy: Це все-таки найкраща відповідь зсувом, так що це нічого не змінить.
BoltClock

Тож у чому сенс assign()? З цієї відповіді та документів це звучить ідентично location = ....
Митя

11

Частина про неможливість використання кнопки "Назад" є поширеною помилкою. window.location.replace (URL) викидає верхній ОДИН запис зі списку історії сторінки, перезаписавши його новим записом, так що користувач не може легко повернутися до тієї ОДНОЇ веб-сторінки. Функція НЕ знищує весь список історії сторінок, а також не робить кнопку "Назад" абсолютно не функціональною.

(НІ функція, ані комбінація параметрів, про які я знаю, можуть змінювати або перезаписувати записи списку історії, які не змінюють ви не володієте абсолютно напевно - браузери, як правило, обмежують це обмеження безпеки, просто не визначаючи жодної операції, яка взагалі може вплинути на будь-який запис, окрім іншого верхній один в списку історії сторінки. Я з жахом думаю , що сортує з підлих речей шкідливих може зробити , якщо існувала така функція) .

Якщо ви дійсно хочете зробити кнопку "Назад" нефункціональною (напевно, не "зручною для користувачів": подумайте ще раз, якщо це дійсно те, що ви хочете зробити), "відкрийте" абсолютно нове вікно. (Ви можете "відкрити" спливаюче вікно, яке навіть навіть не має кнопки "Назад" ... але спливаючі вікна не дуже популярні в наші дні :-) Якщо ви хочете, щоб ваша сторінка відображалася незалежно від того, що робить користувач ( знову "дружелюбність до користувачів" сумнівна), встановіть window.onunload обробник, який просто перезавантажує вашу сторінку знову і знову з самого початку.


4
"НІ функція, ані комбінація параметрів, про які я знаю, можуть змінювати або перезаписувати записи в списку історії" ... Ласкаво просимо до HTML5
SpYk3HH

6
Неможливість змінити або замінити записи історії браузера, якими ви не володієте, - це правило безпеки, яке існує вже давно . HTML5 просто продовжує це правило.
Чак Колларс

Ви скоріше пропустили точку чи сарказм. Перегляньте html5 та історію
SpYk3HH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.