2016-12-27 3 views
5

問題があります:ファイルの保存ダイアログが閉じられたり、サーバー上に生成されたcsvファイルが読み込まれたときにキャッチしたいと思います)。私はそのようなイベントがJavascriptにないことを知っています。このようなマイナーな問題のCookieをバックエンドに追加したくないので、別の回避策を実装したいと思います。私が見る唯一の方法はiframeですが、少なくとも私が見ることができる限り、onloadのようなイベントリスナーはChromeの添付ファイルヘッダーの場合には機能しません。また、iframeステータスのタイマーチェックを実装しようとしましたが、ファイルの要求が送信された直後に機能しました。このソリューションは私の目標に合わないので、ファイルは数秒(10-20)でサーバー上に生成されます。ファイルを特定する方法はiframeにロードされています

私はfrontendでAngularを使用していますので、互換性のあるソリューション(vanilla JS、jQuery、Angular自体)は私にとって大きな助けになります。何かを得ることを望む。君たちありがとう!

+0

可能な複製(http://stackoverflow.com/questions/41334881/detect-when-user-accepts-to-download-a-file)、[どのように大規模なjsonをダウンロードするとUncaught RangeErrorを解決する](http://stackoverflow.com/questions/39959467/how-to-solve-uncaught-rangeerror-when-download-large-size-json) – guest271314

+0

@ guest271314実際には、 、それはいいえです。あなたが見せてくれた答えを見ましたが、それは私を助けませんでした。 –

+0

_「あなたが見せてくれた答えを見ましたが、それは私を助けませんでした」 - あなたはどういう意味ですか?最初のリンクは、ユーザーが保存するファイルをチェックします。 2番目のリンクは、ファイルが_N_秒または分後にブラウザにダウンロードされた実際の瞬間を提供します。 _ "ファイルの保存ダイアログが閉じられたり、サーバー上に生成されたcsvファイルがロードされている(読み込み時にスピナーが表示されない)時があります。"第1または第2のリンクで満たされていない要件は何ですか? – guest271314

答えて

1

Save file UIダイアログを開いたり閉じたりしたときに発生する、ここで気付いているDOMイベントはありません。

あなたはSave fileダイアログが閉じて、アプローチは完全に信頼できるものではありませんけれどもwindow取り戻すには、download属性セットを持つ<a>要素に.click()を呼び出した後に注力されたときにキャッチするfocusイベントを利用してみてください。

// append or display spinner element here 
var csvUrl = document.createElement("a"); 
csvUrl.href = url; 
csvUrl.download = "csv_filename"; 
csvUrl.click(); 
window.onfocus = function() { 
    document.body.removeChild(csvUrl); 
    // remove or hide spinner element here 
    window.onfocus = null; 
} 
[ユーザーがファイルをダウンロードするために受け入れたときに検出]の
+1

あなたよりも、これは私が望んでいたのと同じように機能します。この問題を解決してくれてありがとう! –

関連する問題