Firefox и перенаправление JavaScript - PullRequest
4 голосов
/ 08 марта 2010

У меня в настоящее время проблема с Firefox, когда все остальные браузеры ведут себя правильно - даже IE6!

Я хочу перенаправить на подстраницу, но оставить запись в истории. Насколько я знаю, есть 2 способа переписать URL:

  • window.location = "some.url"; - перенаправить на some.url с историей
  • window.location.replace ( "some.url"); - перенаправление без записи истории

Так что я должен использовать первый и протестированный в консоли firebug, все работает нормально.

Теперь есть странная часть этого вопроса: то же утверждение, которое отлично работало в консоли, отсутствует в каком-либо обработчике обратного вызова jQuery:

jQuery("#selector").bind("submit", function() {
  $.getJSON("some_cool_json", function(response) {
    var redirect_path = response.path;
    window.location = redirect_path;
  });
  return false;
});

где response_path установлено правильно, я проверил! Даже перенаправление работает правильно, но запись истории не создана.

Есть идеи на этот счет? Было бы замечательно! ;)

Приветствия

Джо

Ответы [ 2 ]

7 голосов
/ 08 марта 2010

использовать assign () :

window.location.assign("http://...");

заменить (URL)
Заменить текущий документ на один по указанному URL. The отличие от метода assign () что после использования replace () текущий страница не будет сохранена в сеансе история , то есть пользователь не будет возможность использовать кнопку Назад, чтобы перейдите к нему.

3 голосов
/ 08 марта 2010

Если бы это случилось со мной, я бы попробовал вот что:

jQuery("#selector").bind("submit", function() {
  $.getJSON("some_cool_json", function(response) {
    var redirect_path = response.path;
    setTimeout(function() {
      window.location.assign(redirect_path);
    }, 1);
  });
  return false;
});

Идея состоит в том, чтобы поместить выполнение вызова assign () в «нормальный» обработчик событий, на случай, если в контексте функции ответа «getJSON» есть что-то странное. Эта функция (ответ «getJSON») будет вызываться из контекста браузера, выполняющего код блока <script>, который только что был добавлен в DOM, так что это, по крайней мере, немного необычно.

Я не знаю, что это сработает; Я не пытался настроить тестовую страницу.

...