Перенаправление JavaScript (location.href) прерывается кнопка "Назад", если не используется setTimeout ()

Я только что наткнулся на странное поведение в Firefox 3.6 / Mac. Я подозреваю, что это общее поведение Firefox.

Я создал две очень простые тестовые страницы, которые изменяют свойство window.location.href для перехода к новому URL-адресу:

Если вы попробуете выполнить следующее с любым файлом:

  • Откройте новый / blank вкладка браузера.
  • Вставьте URL-адрес и нажмите «Enter».

Вы заметите одно различие между ними: при использовании первой ссылки кнопка «Назад» в браузере отключается; используя второй, он включен и работает так, как я ожидал.

Единственное различие между двумя сценариями состоит в том, что последний устанавливает тайм-аут в одну секунду перед изменением window.location.href .

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

Я предполагаю, что, возможно, Firefox обработает немедленное «перенаправление», установив window.location.href то же самое, что и использование метода window.location.replace () , поскольку я думаю, что разработчики обычно используют первый, когда они собираются использовать второй. Возможно, использование setTimeout , поскольку это приводит к асинхронному запуску кода, устраняет такое поведение. Неужели это так?

Я не знаю ' t экспериментировал с минимальным значением для setTimeout для достижения желаемого эффекта, но я сделаю это сейчас. Однако я хотел бы выяснить, почему это происходит именно так.

Спасибо!

5
задан Bungle 17 September 2010 в 01:05
поделиться