Jquery продолжает работать даже после перенаправления URL в Chrome - PullRequest
2 голосов
/ 14 декабря 2011
$('#target').click(function() {
window.location.replace("http://www.google.com");
return false;
}); 

Как я могу сказать chrome и всем другим браузерам прекратить то, что они делают, и немедленно перенаправить на другую веб-страницу?

Firefox 8.0 немедленно выполняет window.location.replace, как я хочу.

Когда я выполняю код, описанный выше, Chrome 15.0.874.121 пролетает прямо за кодом window.location и возвращением false, а затем перемещается в последующие функции Jquery (другими словами, Chrome завершает весь стек вызовов, а затем заменяет URL-адрес. )

Я пытаюсь выполнить перенаправление в ряде различных областей, самая большая проблема заключается в том, что дополнительный Jquery может добавить 3-5 СЕКУНД времени к перенаправлениям, особенно из-за успешного вызова .ajax.

Я использую jQuery 1.7.1 и у меня нет ошибок JavaScript

Я пробовал:

  • повсюду ставит 'return false'
  • с использованием различных перенаправлений (location.reload (true), location.href и т. Д.)
  • перемещение моего перенаправления полностью за пределы любой другой функции
  • Перенос моего перенаправления в отдельную функцию в целом

Независимо от того, что я делаю, Chrome отказывается просто перейти на другой веб-сайт без предварительной обработки стека вызовов. Пожалуйста, помогите.

Ответы [ 4 ]

1 голос
/ 15 декабря 2011
$('#target').click(function() {
window.location.replace("http://www.google.com");
//THROW an exception is the only solution I've found so far
throw "Reloading Page";
}); 

К сожалению, я не нашел лучшего ответа. Это не проблема JQuery в конце концов. Я все урезал: удалил все расширения в chrome, удалил все внешние файлы, сделал полностью пустой .html файл с минимальным javascript и простым нажатием кнопки мыши ... и Chrome STILL прошел через перенаправление.

ТАК: На данный момент мой единственный ответ - выдать исключение, чтобы Chrome прекратил запуск JS сразу после перенаправления.

Благодаря Gijs

Редактировать: К сожалению, Chrome делает паузу для исключений по умолчанию, так что на самом деле это не развертываемое решение.

0 голосов
/ 26 декабря 2013

У меня была точно такая же проблема.Я закончил тем, что использовал блок if else, и он работал.

Coffeescript

if Number(deck.length) == Number(deck.counter)
     window.location.href = "/rounds" 
else
    whatever...

Javascript

if (Number(deck.length) === Number(deck.counter)) {
      return window.location.href = "/rounds";
    } else {
0 голосов
/ 15 декабря 2011

Вы пробовали event.preventDefault?

$('#target').click(function(evt) {
    evt.preventDefault();
    window.location.replace("http://www.google.com");
    return false;
}); 
0 голосов
/ 14 декабря 2011

Почему бы вам не использовать простой Javascript и только сделать

document.location = "http://google.com";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...