blob: URL
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
blob (またはオブジェクト) URL、すなわち blob: スキームが接頭辞として付いた URL を使用すると、 Blob
や MediaSource
を、 <img>
要素など、URL でのみ使用するように設計されている他の API と統合することができます。 blob URL は、ローカルで生成されたデータのダウンロードを開始したり、そのデータに移動したりするためにも使用できます。これらは不透明な識別子として設計されているため(つまり、手書きで記述してはいけません)、 URL.createObjectURL()
や URL.revokeObjectURL()
関数を使用して管理する必要があります。
blob URL は data URL とよく似ています。どちらも、メモリー内のリソースを URL として表すことができます。違いは、データ URL はリソースを自身に埋め込み、サイズに厳しい制限があるのに対し、 blob URL はバックエンドの Blob
または MediaSource
を必要とし、より大きなリソースを表すことができる点です。
構文
使用上のメモ
メモリー管理
createObjectURL()
を呼び出すたびに、同じオブジェクトに対してすでに URL が作成されている場合でも、新しいオブジェクト URL が作成されます。これらの URL は、必要がなくなった時点で、URL.revokeObjectURL()
を呼び出して解放する必要があります。 1 つのオブジェクト URL がアクティブな状態である限り、基盤となるオブジェクトはガベージコレクションの対象とならず、メモリーリークを発生させる可能性があります。
ブラウザーは、文書がアンロードされるとオブジェクトの URL を自動的に解放しますが、パフォーマンスとメモリー使用量を最適化するには、明示的にアンロードできる安全な時点がある場合は、その時点でアンロードすることをお勧めします。
ただし、オブジェクトの URL を早すぎる段階で解放することは避けてください。よくあるアンチパターンは次のとおりです。
const url = URL.createObjectURL(blob);
img.src = url;
img.addEventListener("load", () => {
URL.revokeObjectURL(url);
});
document.body.appendChild(img);
画像がレンダリングされた直後に blob URL を無効にすると、ユーザーは画像に対して操作(右クリックして画像を保存したり、新しいタブで開いたりなど)を行うことができなくなります。長寿命のアプリケーションでは、ユーザーがリソースにアクセスできなくなった場合(画像が DOM から削除された場合など)にのみ、オブジェクト URL を無効にする必要があります。
ストレージ分割
メディアストリームにオブジェクト URL を使用
古いバージョンの Media Source 仕様書では、 <video>
要素にストリームを接続するには、 MediaStream
のオブジェクト URL を作成する必要がありました。これはできなくなりました。また、ブラウザーではこの機能の対応が除去されつつあります。
警告:
メディア要素にストリームを添付するために createObjectURL()
に依存しているコードがまだ存在する場合、コードを更新して、 srcObject
を MediaStream
に直接設定する必要があります。
例
有効な blob URL
blob:https://example.org/40a5fb5a-d56d-4a33-b4e2-0acf6a8e5f64
blob URL の作成
仕様書
Specification |
---|
File API # url |