2016-05-15 7 views
1

は、私は次のコードを使用してJavaScriptでファイルを保存している:私は、ファイルがダウンロードされると(URL.revokeObjectURLを使用して)URLを取り消すオブジェクトのURLをダウンロードした後で取り消すにはどうすればよいですか?

var a = document.createElement('a'); 
a.href = URL.createObjectURL(new Blob(['SOME DATA'])); 
a.download = 'some.dat'; 
a.click(); 

。そうすることはいつ安全ですか?

私はa.click()を呼び出した直後に取り消すことができます(これはうまくいくようですが、安全かどうかはわかりません)。 aさんのclickイベントリスナーですか?のデフォルトアクションの後に、クリックイベントリスナーを実行させる方法がありますか?

答えて

2

a.click() DOM要素のclickイベントの伝播ではなく、要素のクリックをシミュレートするので、直接ブラウザに送信されます。私は、タイマを使用してURLオブジェクトの取り消しを別のイベントサイクルに移すのが少し安全だと考えています:

setTimeout(function() { 
URL.revokeObjectURL(a.href); 
}, 0); 
+0

あなたは 'setTimeout'を意味していますか? – Sumurai8

+0

click()はイベントを発生させますが、[MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click)を参照してください。つまり、非同期であるため、現在のJS実行サイクルの後に実行されます。 –

+1

こんにちはスティーブ、あなたは正しいです。私は通常のユーザーのクリックと同じように、click()internalyイベントループクリックイベント(MDNのみのバブリングフェーズに従う)を追加します。しかし、タイマーを設定することで、これらのイベントを処理してもURLオブジェクトの取り消しを延期します。しかし、いつでもより高いtiemoutを設定することができます:) –

関連する問題