タイトルで全てを言い尽くしてしまいましたが、経緯をば。
不具合報告で「IEで画像のアップロードができない」ってのがあったので調査してみたら、readAsBinaryString
でコケてました。
調べてみると、どうもIE系列ではreadAsBinaryString
そのものが存在しないらしく…
なんでなのかというと、そもそもこのAPI、将来的になくなる方向らしいのです(実際にw3cのドキュメントからも消えてる)。
というわけで、readAsBinaryString
をreadAsArrayBuffer
に置き換えたら、IE11でも(もちろんChrome/Firefoxでも)問題なく動いたのですが…
非推奨になった理由
で、なんで非推奨となったのかというと、単に効率が悪いからだそうで。
https://lists.w3.org/Archives/Public/public-webapps/2011OctDec/1497.html
要約すると「このメソッドは型付きの配列(ArrayBuffer)が標準化される前に作られた実装で、バイナリデータを文字列に変換するから効率が悪い」とのこと。
今は型付きの配列は既に実装されていて、それを読み取る関数(readAsArrayBuffer
)も実装済み。したがって、非効率的な古いAPIに存在意義はない(から削除するべきだ)、ということみたいです。
というわけで、これからはreadAsArrayBuffer
なのです。
Blobを作らなくても、fileオブジェクトならそのまま渡せます。