Разница между window.location.href, window.location.replace и window.location.assign - PullRequest
101 голосов
/ 09 октября 2011

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

  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>

Ответы [ 2 ]

146 голосов
/ 09 октября 2011

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

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

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

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

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

10 голосов
/ 24 апреля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...