web-dev-qa-db-ja.com

「ああ、スナップ」データURIが大きすぎる場合

私はchrome拡張を書いて、次のことをします:

  1. XMLHttpRequestを使用してWebサイトからメモリにファイルをダウンロードします
  2. ファイルにデータを追加してから、base64が結果を変数total_encoded_dataにエンコードします。
  3. <a href=data:application/octet-stream;charset=utf-8;base64,' + total_encoded_data+' download='file.bin'>Click to Download</a>を使用してユーザーにデータを提供します。 jQueryを使用してtotal_encoded_dataをhrefに追加します。

手動のバイナリ検索の結果、total_encoded_dataのサイズが2097100文字を超える場合、リンクをクリックするとAw、Snapメッセージが表示されることがわかりました。サイズが小さければ、期待どおりにダウンロードできます。

ファイルサイズのテストに加えて、atoiを使用して、base64エンコーディングが有効であり、エラーなしで動作することを確認しました。

Aw、Snapメッセージは、chrome://crashesのクラッシュレポートや、chrome_debug.logの予期しない出力を生成しません。

Base64でエンコードされた文字列の長さが2097100より大きいデータURIを提供するときに、Aw、Snapメッセージを回避するにはどうすればよいですか?

41
amccormack

既知のクロムのバグ です。推奨される回避策は blob URL を使用することです。 JavaScriptでbase64文字列からBlobを作成する も参照してください。

54
rhashimoto