Разница между 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, который просто перезагружает вашу страницу с самого начала с самого начала каждый раз.