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