0

私の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');
}

ただし、これは、ポップアップブロッカーが無効になっている場合にのみ機能します。このソリューションの使用は避けたいと思います。

4

1 に答える 1

0

はい、IE9はonunloadハンドラーのナビゲーションをブロックします。

于 2011-03-30T18:33:37.120 に答える