私のWebアプリケーションでは、カスタムURLプロトコルを使用してデスクトップアプリケーションを起動します。例:「fakeproto://」はデスクトップに「fakeproto.exe」を起動します。私が何について話しているのかわからない場合は、これを読んでください:URLプロトコルへのアプリケーションの登録
ただし、起動する前に、ユーザーのPCに「fakeproto.exe」がインストールされていることを確認する方法が必要でした。ちょっとしたハックですが、すべての主要なブラウザで動作するようになりました。IEは最も多くの問題を提示し、独自の実装を行いました。
Javascriptでは、最初にカスタムURLプロトコルをロードしようとします。
window.open('fakeproto://', '_self');
この前に、実際に次のonunloadイベントハンドラーを定義しました。
window.onunload = function()
{
window.open('help.php', '_self');
}
したがって、デスクトップがカスタムURLプロトコルを認識しなかった場合、IEは単に現在のページを離れて、「Webページを表示できません」に移動します。このイベントでは、onunloadイベントハンドラーが起動し、代わりにhelp.phpを開きます。
これはIE7とIE8でうまく機能しますが、IE9にアップグレードすると、これは機能しなくなりますか?help.phpの代わりに「ウェブページを表示できません」に移動します。
デバッガーを使用すると、onunloadイベントハンドラーが起動し、コードが正しく実行されますが、何らかの理由でwindow.open呼び出しが機能していません。ポップアップブロッカーも無効にして、そうでないことを確認しました。運がない。
誰かアイデアはありますか?IE9がwindow.openでより厳密になっていると聞いた人はいますか?元の問題に対する代替の解決策を知っている人はいますか?
ところで、help.phpを新しいウィンドウで開くと、動作させることができます。
window.onunload = function()
{
window.open('help.php', '_blank');
}
ただし、これは、ポップアップブロッカーが無効になっている場合にのみ機能します。このソリューションの使用は避けたいと思います。