createObjectURL

URL インターフェイスオブジェクト createObjectURL メソッド (DOM)

[4] window.URL オブジェクトcreateObjectURL メソッドは、与えられた Blob を表す Blob URL 作成し、返します。

仕様書

処理

[12] 次のようにしなければなりません

  1. [13] オブジェクトを、必須の第1引数を Blob または MediaSource と解釈した結果に設定します。
  2. [30] オブジェクトにより、
    Blob >>11
    1. [14] オブジェクト読み取り可能性状態CLOSED なら、
      1. [16] オブジェクトBlob URLのUnicode直列化を返します。
    2. [15] それ以外の場合、
      1. [21] URL を、オブジェクトBlob URLのUnicode直列化に設定します。
      2. [18] Blob URL Storeに項目を追加します。
        URL
        URL
        Blob
        オブジェクト
      3. [17] URL を返します。
    MediaSource >>29
    1. [31] URL を、オブジェクトMediaSource object URL に設定します。
      1. [21] URL を、オブジェクトBlob URLのUnicode直列化に設定します。
      2. [32] Blob URL Storeに項目を追加します。
        URL
        URL
        Blob
        オブジェクト
      3. [33] URL を返します。

[19] CLOSED の場合、 URL は返されますが、 Blob URL Store には追加されていませんから、参照してもネットワークエラーになります。
[34] MSE 仕様書猿パッチのような形で MediaSource の場合を規定していて、あまり厳密な挙動が記述されていません。
[27] MediaStream からも作成できます。

テストケース

[10] デモ:

関連

[5] URL を破棄する revokeURLObject メソッドもあります。

[20] createFor とは違って、自動revokeは行われません。

[22] とはいえ文書のunloadが行われる時には結局すべて破棄されます。 文書unload されずに開かれ続けるならメモリリークですが、 そうでなければ致命的な問題というわけではありません。

歴史

[6] Firefox 4 以降で prefix 無しで実装されています。

[8] WebKit では window.webkitURLprefix 無しで実装されています。

[1] Firefox ではこんな値になりました :

moz-filedata:71f89f18-c11d-496c-83c9-f24da88689a5

[2] Chrome ではこんな値になりました

blob:http://suika.fam.cx/6ff6e0e9-51d5-41e2-8752-411cbfc3fc7a

起源URL 内に入れておきたいという意図かな。

[9] [FileAPI] createObjectURL isReusable proposal ( (Adrian Bateman 著, 版)) <http://lists.w3.org/Archives/Public/public-webapps/2011OctDec/1499.html>

メモ

[23] イベントハンドラー内容属性では URLdocument.URL と解釈されてしまうので、

<p onclick=" window.URL.createObjectURL (...) ">
... のように window. を補う必要があります。

[24] Make the Blob URL creating/revoking methods not be exposed on the ser… · w3c/FileAPI@b9c2275 ( 版) <https://github.com/w3c/FileAPI/commit/b9c2275df53cf3a808f1f272f3d6134d1b920549>

[25] Media Source Extensions ( ()) <https://w3c.github.io/media-source/#url>

[26] Allow for a URL record's object to be a MediaSource or MediaStream · Issue #126 · whatwg/url ( ()) <https://github.com/whatwg/url/issues/126>

[28] Media Source Extensions™ () <https://w3c.github.io/media-source/#h-url>

[35] Revive createObjectURL? · Issue #404 · w3c/mediacapture-main () <https://github.com/w3c/mediacapture-main/issues/404>

[36] 591719 - Blink::MediaStream Remove deprecated createObjectURL() - chromium - Monorail () <https://bugs.chromium.org/p/chromium/issues/detail?id=591719>

[37] 1334564 – Deprecate and remove URL.createObjectURL(mediastream) () <https://bugzilla.mozilla.org/show_bug.cgi?id=1334564>

[38] Bug 167518 – Deprecate and remove URL.createObjectURL(mediastream) () <https://bugs.webkit.org/show_bug.cgi?id=167518>

[39] Refactor Blob URL Store definition. (#92) (mkruisselbrink著, ) <https://github.com/w3c/FileAPI/commit/0fd8922f877b7701b9d364d9257c5d9d76971fae>

[40] URL.createObjectURL should not work with MediaStream by annevk · Pull Request #10515 · w3c/web-platform-tests () <https://github.com/w3c/web-platform-tests/pull/10515>

[41] fetch assumes a url's object is always a Blob · Issue #457 · whatwg/fetch () <https://github.com/whatwg/fetch/issues/457>

[42] Revive createObjectURL? · Issue #404 · w3c/mediacapture-main () <https://github.com/w3c/mediacapture-main/issues/404>

[43] 591719 - Blink::MediaStream Remove deprecated createObjectURL() - chromium - Monorail () <https://bugs.chromium.org/p/chromium/issues/detail?id=591719>

[44] 800767 - Deprecate and Remove URL.createObjectURL for MediaStream - chromium - Monorail () <https://bugs.chromium.org/p/chromium/issues/detail?id=800767&desc=2>

[45] 7e16825899d0362f71ff8d7585f54985d2d4c4ef - chromium/src - Git at Google () <https://chromium.googlesource.com/chromium/src/+/7e16825899d0362f71ff8d7585f54985d2d4c4ef>

[46] 1334564 - Deprecate URL.createObjectURL(mediastream) () <https://bugzilla.mozilla.org/show_bug.cgi?id=1334564>

[47] 1454889 - Remove createObjectURL()'s MediaStream overload () <https://bugzilla.mozilla.org/show_bug.cgi?id=1454889>

[48] 167518 – Deprecate and remove URL.createObjectURL(mediastream) () <https://bugs.webkit.org/show_bug.cgi?id=167518>

[49] Remove mention of MediaStream · Issue #380 · whatwg/url () <https://github.com/whatwg/url/issues/380>