-
Notifications
You must be signed in to change notification settings - Fork 4
/
904.txt
138 lines (103 loc) · 5.1 KB
/
904.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
[4] [CODE(DOMi)@en[[[window.URL]]]] [[オブジェクト]]の [DFN[[CODE(DOMm)@en[[[createObjectURL]]]]]]
[[メソッド]]は、与えられた [CODE(DOMi)@en[[[Blob]]]] を表す [[Blob URL]]
作成し、返します。
* 仕様書
[REFS[
- [11] '''[CITE[File API]] ([TIME[2015-04-17 16:25:21 +09:00]] 版) <https://w3c.github.io/FileAPI/#dfn-createObjectURL>'''
- [29] [CITE@en[Media Source Extensions™]] ([TIME[2016-11-17 04:05:37 +09:00]]) <https://w3c.github.io/media-source/#h-url>
]REFS]
* 処理
[12] 次のようにしなければ[MUST[なりません]]。
[FIG(steps)[
= [13] [VAR[オブジェクト]]を、必須の第1引数を
[CODE(DOMi)@en[Blob]] または [CODE(DOMi)@en[MediaSource]] と解釈した結果に設定します。
= [30] [VAR[オブジェクト]]により、
[FIG(switch)[
: [CODE(DOMi)@en[Blob]] [SRC[>>11]] :
[FIG(steps)[
= [14]
[VAR[オブジェクト]]の[F[読み取り可能性状態]]が [CODE[[[CLOSED]]]] なら、
== [16] [VAR[オブジェクト]]の [F[Blob URLのUnicode直列化]]を返します。
= [15]
それ以外の場合、
== [21] [VAR[URL]] を、[VAR[オブジェクト]]の [F[Blob URLのUnicode直列化]]に設定します。
== [18] [[Blob URL Storeに項目を追加]]します。
[FIG(list members)[
: [F[URL]] : [VAR[URL]]
: [F[[CODE(DOMi)@en[Blob]]]] : [VAR[オブジェクト]]
]FIG]
== [17]
[VAR[URL]] を返します。
]FIG]
: [CODE(DOMi)@en[MediaSource]] [SRC[>>29]] :
[FIG(steps)[
= [31]
[VAR[URL]] を、[VAR[オブジェクト]]の [F[MediaSource object URL]] に設定します。
== [21]
[VAR[URL]] を、[VAR[オブジェクト]]の [F[Blob URLのUnicode直列化]]に設定します。
== [32]
[[Blob URL Storeに項目を追加]]します。
[FIG(list members)[
: [F[URL]] : [VAR[URL]]
: [F[[CODE(DOMi)@en[Blob]]]] : [VAR[オブジェクト]]
]FIG]
== [33]
[VAR[URL]] を返します。
]FIG]
]FIG]
]FIG]
;; [19] [CODE[[[CLOSED]]]] の場合、 [[URL]] は返されますが、
[[Blob URL Store]] には追加されていませんから、参照しても[[ネットワークエラー]]になります。
;; [34] [[MSE]] [[仕様書]]は[[猿パッチ]]のような形で [CODE(DOMi)@en[MediaSource]]
の場合を規定していて、あまり厳密な挙動が記述されていません。
@@ [27] [CODE(DOMi)@en[MediaStream]] からも作成できます。
* テストケース
[10] デモ:
[REFS[
- [3] [CITE[window.URL.createObjectURL]] ([TIME[2011-09-19 20:09:05 +09:00]] 版) <http://suika.fam.cx/~wakaba/-temp/test/dom/url/createobjecturl-1.html>
]REFS]
* 関連
[5] [[URL]] を破棄する [CODE(DOMm)@en[[[revokeURLObject]]]] [[メソッド]]もあります。
[20] [CODE(DOMm)@en[[[createFor]]]] とは違って、[[自動revoke]]は行われません。
;; [22] とはいえ[[文書のunload]]が行われる時には結局すべて破棄されます。
[[文書]]が [[unload]] されずに開かれ続けるなら[[メモリリーク]]ですが、
そうでなければ致命的な問題というわけではありません。
* 歴史
[6] [[Firefox]] 4 以降で [[prefix]] 無しで実装されています。
[REFS[
- [7] [CITE@en[Using files from web applications - MDN]] ([TIME[2011-09-19 19:56:34 +09:00]] 版) <https://developer.mozilla.org/en/Using_files_from_web_applications#Using_object_URLs>
]REFS]
[8] [[WebKit]] では [CODE(DOMi)@en[[[window.webkitURL]]]] で [[prefix]] 無しで実装されています。
[1] [[Firefox]] ではこんな値になりました [TIME[2011-09-19T11:10:32.200Z]]:
[PRE(URI example code)[
moz-filedata:71f89f18-c11d-496c-83c9-f24da88689a5
]PRE]
[2] [[Chrome]] ではこんな値になりました [TIME[2011-09-19T11:10:59.500Z]]
[PRE(URI example code)[
blob:http://suika.fam.cx/6ff6e0e9-51d5-41e2-8752-411cbfc3fc7a
]PRE]
;; [[起源]]を [[URL]] 内に入れておきたいという意図かな。
[9] [CITE@en[''''''[''''''FileAPI'''''']'''''' createObjectURL isReusable proposal]]
( ([[Adrian Bateman]] 著, [TIME[2011-12-14 09:52:04 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2011OctDec/1499.html>
* メモ
[23] [[イベントハンドラー内容属性]]では [CODE[URL]] が [CODE(JS)@en[[[document.URL]]]]
と解釈されてしまうので、
[FIG[
[PRE(HTML example code)[
<p onclick=" window.URL.createObjectURL (...) ">
]PRE]
]FIG]
... のように [CODE(JS)@en[window.]] を補う必要があります。
[24] [CITE@en[Make the Blob URL creating/revoking methods not be exposed on the ser… · w3c/FileAPI@b9c2275]]
([TIME[2016-04-16 15:33:34 +09:00]] 版)
<https://github.com/w3c/FileAPI/commit/b9c2275df53cf3a808f1f272f3d6134d1b920549>
[25] [CITE@en[Media Source Extensions]]
( ([TIME[2016-06-10 10:07:55 +09:00]]))
<https://w3c.github.io/media-source/#url>
[26] [CITE@en[Allow for a URL record's object to be a MediaSource or MediaStream · Issue #126 · whatwg/url]]
( ([TIME[2016-06-12 12:38:08 +09:00]]))
<https://github.com/whatwg/url/issues/126>
[28] [CITE@en[Media Source Extensions™]]
([TIME[2016-11-17 04:05:37 +09:00]])
<https://w3c.github.io/media-source/#h-url>