window.open больше не работает при вызове в обработчике событий onunload в IE9.

В моем веб-приложении я запускаю настольное приложение, используя собственный протокол 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 появляется сообщение «веб-страница не может быть отображена».

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

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

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

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

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


person dream_team    schedule 29.03.2011    source источник
comment
[BGerrissen] Да. Тоже не работает.   -  person dream_team    schedule 30.03.2011


Ответы (1)


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

person EricLaw    schedule 30.03.2011
comment
у вас случайно нет ссылки на то, где это задокументировано? любой способ разрешить это? - person dream_team; 31.03.2011
comment
@dream_team: Навигация в onunload отключена из соображений безопасности. В противном случае, если вы попытаетесь покинуть мой сайт, я могу просто перезагрузить страницу, заставив вас остаться. - person Rocket Hazmat; 11.08.2011