一部のリンクでユーザーがPDFファイルを取得できる)Webページ(JSFで作成)があります。
ユーザーがそのようなリンクをクリックすると、待機中のポップアップ(モーダルパネル)が表示され(PDFの生成が長くなる可能性があるため)、ファイルが作成されると、= IEは、「開く」、「保存」、「キャンセル」オプションを提案する「ファイルのダウンロード」ポップアップを表示します。
このポップアップが閉じられたとき、つまりユーザーがPDFファイルを保存(または開いた)したとき)をWebページから知る方法はJavascriptにありますか?
もう少し正確に言うと、PDFファイルへのリンクを表示するWebページでは、ユーザーを待機させるためにモーダルポップアップ(「待機中のポップアップ」)が表示されます。 「ファイルのダウンロード」ポップアップ。問題は、ユーザーがPDFファイルを保存(または開く)すると、「ファイルのダウンロード」ポップアップは閉じますが、ユーザーは元のWebページに「戻る」ことです。 、待機中のポップアップが表示されたままです。
私のアプリケーションはIE6でのみ実行されるため、IE(6)のみのソリューションには反対していません...
JQueryを必要とするソリューションにも問題はありません;)
編集:「ファイルのダウンロード」ポップアップがユーザーに表示されたとき(つまり、ユーザーが保存、開く、またはキャンセルを選択する前)に発生するイベントをキャッチするソリューションが存在する場合、私も元気です!
私はこの種の問題に別のプロジェクトで取り組む必要がありました。別の Stackoverflowの質問 で説明されているように、私はついにスマートな解決策を見つけました。
説明は次の投稿に記載されています: http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser
アイデアは、ファイルがいつダウンロードされるかを定義するために「単に」Cookieを使用することです。
そのようなイベントは存在しません。これを解決するには、別のアプローチを取る必要があります。
target="myhiddeniframe"
)onload
属性を、スピナーを非表示にするコールバックに設定します正味の効果:PDFの生成中に「スピン」し、「ファイルのダウンロード」ダイアログが表示されたときに「スピンを解除」します(「ファイルのダウンロード」ダイアログが閉じたの場合とは対照的です)。
ブラウザへの何らかのActiveXプラグインを検討したい場合を除いて、答えはノーであると確信しています(その場合、答えはまだノーである可能性があります...)
例:
$('.generate_file_asynchronously').click(function(){
var url = $(this).attr('href');
show_loading_message();
$.get(url, function(file_url) {
hide_loading_message();
window.location.href = file_url;
});
return false;
});
私がここで読んだすべての回答と、stackoverflowや他の場所での関連する質問では、問題の最初の部分、つまりサーバーがファイルを準備するのにかかる時間しか解決していません。問題の2番目の部分、つまりファイルが実際にクライアントにダウンロードを完了するのにかかる時間は、それほど簡単ではありません。
このアプリケーションでは、次のアプローチに従いました。すでにcometdに基づく通知プッシュメカニズムがあります(cometdの詳細についてはこちらをご覧ください: Cometdとは何ですか?なぜそれが使用されるのか、その作業方法 )が、WebSocketも使用できると思いますまたは同様のもの。バックエンドではJavaを使用しますが、何でもかまいません。