В моем веб-приложении я запускаю настольное приложение, используя собственный протокол 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');
}
Но это работает только в том случае, если какие-либо блокировщики всплывающих окон отключены. Я хотел бы избежать использования этого решения.