トラブルシューティングが非常に厄介な問題があり、何日も前から取り組んでいるので、試してみてください.
環境
同じマシンまたは 2 つの異なるマシンに配置できる 2 つのアプリ サーバーがあり、同じ署名証明書を使用し、2 つの異なる Web アプリをホストします。
ただし、ここでの研究ケースのために、それらは同じ物理マシン上にあるとしましょう。したがって、次のようになります。
webapp1
は GWT ベースのリッチ クライアントであり、その画面の 1 つに、 にある Java WebStart クライアントを呼び出すために使用される項目を含むメニューが含まれていますwebapp2
。これは、次のwindow.open
GWT 呼び出しを介して単純な呼び出しを実行することによって行われます。
Window.open("https://company.com/webapp2/app.jnlp", "_blank", null);
予想される行動
- ユーザーは陽気に行く
webapp1
- ユーザーはメニュー エントリに移動して WebStart アプリを起動し、それをクリックします
- ブラウザは、ブラウザとそのセキュリティ設定に応じて、別のウィンドウ/ダイアログを起動します。
- この安全なサイトに移動するための確認を要求し、
- ファイルを直接ダウンロードし、
- ファイルの関連付けがある場合は、プロセスを自動実行する可能性
javaws
があります。そうでない場合、ユーザーは単にファイルをクリックしてアプリを起動できます (または、ここで必要なことを実行します)。
- アプリを閉じ、ダイアログを閉じ、メニュー エントリを再度クリックすると、同じことが再び発生するはずです。
実際の動作
神に見捨てられたIE 8以外のものについて
(神に見捨てられたIE8以前のものもすべてあることは認めますが、要件の主は慈悲深いので、最近、これらの吸盤を落とすことができました。それは間近でした。手をつないで感謝の祈りをしましょう。)
ものはうまくいきます。JNLP がダウンロードされ、アプリが正常に実行されます。アプリを閉じてすべての手順をやり直すと、問題なく再起動します。人々は喜びます。子犬は安全で、日差しの中で緑の丘で遊んでいます。開発者は、コーヒーを飲みに行って、SO の質問をチェックするなど、より有意義でやりがいのあるタスクに進むことができます。
Chrome は JNLP を実行したくありませんが、誰が気にしますか? 隔週でファイルをクリックしても、顧客は RSI を取得しません。
神に見捨てられたIE8について
最初にアクセスすると、ダイアログが開き、ユーザーが続行するための確認を求めますが、webapp2
安全ではない可能性があります (ここではドラゴンです)。JNLP がダウンロードされて自動的に開き、アプリが起動します。あなたの呼吸は安定してゆっくりしています。
アプリを閉じ、その SSL 確認ダイアログを閉じて、メニュー エントリをもう一度クリックします。ダイアログが開き、自動的に閉じます。何も開始されず、ファイルは既知の場所にダウンロードされず、Fiddler は接続が閉じられたことを報告するだけです。IE を閉じて、そのメニュー項目に到達してもう一度クリックすると、正常に機能するようになりました。もちろん、同じセッション中に再試行するまで。
心拍数が上がり、コーヒーを飲むと事態はさらに悪化し、オンライン オークション サイトで普通のチケットを探し始め、ホッキョクアザラシの赤ちゃんクラブを探しに行き、血に飢えた復讐を果たします。レドモンドの IE チームへのゲートは、しばしば死の脅迫を受けると想定されるため、おそらく氷のブロックよりも安全です。さらに、IE9 および IE10 チームは、前任者が残したがらくたを修正するためにすでに懸命に取り組んでいるため、おそらく、彼らにあまり苦労したくないでしょうし、PI を追跡するために浪費するお金はありません。この混乱の責任者である元開発者。
追加された詳細
no-cache
ヘッダーを使用する場合、IE8 が SSL 経由でファイルをダウンロードしないという多くの問題に遭遇しました。これは確かに私たちの問題の 1 つでしたが、現在は解決されているようです。ファイルを正常にダウンロードwebapp2
し、次のヘッダーを使用して JNLP ファイルを提供します。response.setHeader("Cache-Control", "private, must-revalidate"); // IE8 happy response.setHeader("Pragma", "private"); // IE8 happy response.setHeader("Expires", "0"); // IE8 happy response.setHeader("Access-Control-Allow-Origin", "*"); // allow to request via cross-origin AJAX
response.setContentType("application/x-java-jnlp-file"); // 私を処刑してください
お察しのとおり、SSL 証明書に異常があるため、確認ダイアログが表示されます。残念ながら、私はそれを制御できません。これは一時的なものであり、開発目的のためのものであり、通常は本番環境の証明書を手に入れることはできないと仮定します. そのため、SSL 証明書の有効期限が切れており、サーバーが指定されていません。そして確認ダイアログ。IE がなければ、それほど悪くはありません。他のブラウザは気にせず、確認を求めて、期待どおりに一貫して実行します。
どうか、どうか、助けてください。そうしないと、生け贄の殺害を選択肢として検討するかもしれません。そして、私はまともな価値のあるステンレス鋼のゴルフクラブを見つけたと思うので、私はまさにマチの端にいます.
サイドノート
実際にはIE8 window.open SSL Certificate issueに関連している可能性があります。ダイアログが自動的に閉じる理由は説明されていませんが (それは本当に私を超えています...)、確認ダイアログがなく、ダイアログがまったく必要ないことが役立つ場合があります。たとえば、Window.open を呼び出すために GWT コードで完全に管理するのではなく、そのメニューに単純な URL を配置するだけで問題が解決すると考えていました。しかし、私はそのメニューを制御することはできません。また、これを別の方法で修正する方法と、そもそもなぜそれが起こるのか非常に興味があります...