Chrome не может перенаправить URL при сообщении через JavaScript - PullRequest
2 голосов
/ 15 декабря 2011
function test(){    
    alert("This message should show");
    window.location.href = "http://www.google.com";
    alert("This message should NOT show");
}
<href="#" onClick=test()>Click Me</a>
  • Пошаговое использование Firefox (v8): второе сообщение НЕ отображается.
  • Пошаговое использование хрома (v15, v16): ОБА показывают предупреждения.

Chrome проходит перенаправление и продолжает через остальную часть стека вызовов (в этом случае он завершает onClick) перед перенаправлением.

  • Нет ошибок JavaScript.
  • Все расширения отключены.
  • Я использую пустой html-файл без загруженных внешних файлов.

Кто-нибудь знает способ заставить chrome выполнить изменение window.locationнемедленно

Ответы [ 4 ]

1 голос
/ 15 декабря 2011

Уверен, спецификации не дают вам никаких гарантий для этого, так что я не слишком удивлен. Очевидным решением было бы бросить исключение сразу после. Предполагая, что у вас нет блоков catch вокруг вашего кода, это должно сработать:

throw "Aborting, redirecting you.";

(Да, это ужасно. Извините!)

Редактировать: скрипки: без броска , с броском

0 голосов
/ 29 марта 2013

Я просто пытался сделать то же самое: перенаправить с помощью JS.В моем сценарии PHP, если определенное условие выполняется, я просто завершаю сценарий функцией die , повторяя тег сценария с кодом перенаправления:

die("<script type='text/javascript' charset='utf-8'>\n".
    "window.location.href='http://'+window.location.hostname+'/newdir/newfile.html';\n".
    "</script>\n");

Это былоне работает, и я попытался выполнить код из консоли, и он работает оттуда.Я предположил, что это что-то из-за времени, поэтому я добавил setTimeout к перенаправлению:

die("<script type='text/javascript' charset='utf-8'>\n".
    "var configURL = 'http://'+window.location.hostname+'/newdir/newfile.html';\n".
    "setTimeout('window.location.href = configURL', 500);\n".
    "</script>\n");

Этот патч пока работает, но я думаю, что должен быть лучший способ сделать это.

0 голосов
/ 20 февраля 2013

Есть лучший способ сделать это.

function test(){    
alert("This message should show");
return true;
alert("This message should NOT show");
}

<href="http://www.google.com" onClick="return test()">Click Me</a>

При желании вы можете использовать подтверждение, чтобы контролировать, можно ли выполнить это действие при нажатии. Обвините Google в том, что он пытался связываться с функциональными стандартами, никакой другой браузер не заставляет вас делать это.

0 голосов
/ 15 декабря 2011

Вы можете добавить return

function test(){    
    alert("This message should show");
    window.location.href = "http://www.google.com";
    return;
    alert("This message should NOT show");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...