window.open больше не работает при вызове в обработчике onunload в IE9 - PullRequest
0 голосов
/ 30 марта 2011

В моем веб-приложении я запускаю настольное приложение, используя собственный протокол URL. Например: «fakeproto: //» запустит «fakeproto.exe» на вашем рабочем столе. Если вы не знаете, о чем я говорю, прочитайте это: Регистрация приложения по протоколу URL

Мне нужен был способ, чтобы убедиться, что «fakeproto.exe» был установлен на ПК пользователя перед попыткой запуска. Это что-то вроде хака, но я заставил его работать для всех основных браузеров. IE представил большинство проблем и имел уникальную реализацию.

В Javascript я сначала попытался бы загрузить собственный протокол URL:

window.open('fakeproto://', '_self');

Перед этим я фактически определил следующий обработчик события onunload:

window.onunload = function()
{
     window.open('help.php', '_self');
}

Так что, если рабочий стол не распознает пользовательский протокол URL, IE просто покинет текущую страницу и перейдет к «веб-страница не может быть отображена». В этом случае обработчик события onunload сработает и откроет help.php.

Это прекрасно работает в IE7 и IE8, но после обновления до IE9 это больше не работает? Вместо help.php вместо «help.php» указывается «веб-страница не отображается».

Используя отладчик, обработчик события onunload срабатывает, и код выполняется правильно, но по какой-то причине вызов window.open не работает ??? Я также отключил блокировку всплывающих окон, чтобы убедиться, что это не так. Не повезло.

У кого-нибудь есть идеи? Кто-нибудь слышал о том, чтобы IE9 был более строгим с window.open? Кто-нибудь знает какие-либо альтернативные решения исходной проблемы?

Кстати, я могу заставить его работать, если открою help.php в новом окне.

window.onunload = function()
{
     window.open('help.php', '_blank');
}

Но это работает, только если блокировка всплывающих окон отключена. Я хотел бы избежать использования этого решения.

1 Ответ

0 голосов
/ 30 марта 2011

Да, IE9 блокирует навигацию в обработчике onunload.

...