Разница между window.location.href, window.location.replace и window.location.assign

В чем разница между

  • window.location.href="#" onclick="location.href='http://example.com'; return false;";
  • window.location.replace("http://example.com");
  • 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

Они делают то же самое:

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

Они просто переходят к новому URL-адресу. С другой стороны, метод replace переходит к URL-адресу без добавления новой записи в историю.

Итак, то, что вы прочитали в этих многочисленных формах, неверно. Метод assign добавляет новую запись в историю.

Ссылка: http://developer.mozilla.org/en/window.location

Ответ 2

Часть о невозможности использования кнопки "Назад" является распространенной неверной интерпретацией. window.location.replace(URL) выбрасывает верхнюю запись ONE из списка истории страниц, перезаписывая ее новой записью, поэтому пользователь не может легко вернуться к этой ОДНОЙ конкретной веб-странице. Функция НЕ удаляет весь список истории страниц, а также не делает кнопку "Назад" полностью нефункциональной.

(функция NO или комбинация параметров, о которых я знаю, могут изменять или перезаписывать записи списка истории, которые вы не являетесь абсолютно определенными - браузеры обычно используют это ограничение безопасности, просто не определяя какую-либо операцию, которая может вообще повлиять на любые запись, отличная от верхней в списке истории страниц. Я содрогаюсь, чтобы подумать, какие виды вредоносных программ могут сделать, если такая функция существует.)

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