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

129

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

  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>
milan_9211
источник
1
Вы можете увидеть более старую публикацию в URL-
Вот лучшее объяснение: stackoverflow.com/a/847130/96656
Матиас Байненс

Ответы:

165

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

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

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

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

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

Guffa
источник
1
Большое спасибо за ответ. Это очень помогло мне решить проблему с кнопкой возврата в браузере.
santosh kumar patro
@blunderboy: В любом случае это лучший ответ от оползня, так что это ничего не меняет.
BoltClock
Так в чем смысл assign()? Из этого ответа и документов он звучит идентично location = ....
Митя
11

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

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

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

Чак Колларс
источник
4
«НИКАКИЕ функции и комбинации параметров, о которых я знаю, не могут изменить или перезаписать записи списка истории» ... Добро пожаловать в HTML5
SpYk3HH
6
Невозможность изменить или перезаписать записи истории браузера, которыми вы не владеете, - это правило безопасности, которое существует уже давно . HTML5 просто продолжает это правило.
Чак Колларс
Вы упустили суть или скорее сарказм. Посмотрите html5 и историю
SpYk3HH