-
Notifications
You must be signed in to change notification settings - Fork 4
/
520.txt
1198 lines (987 loc) · 58.1 KB
/
520.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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
[4] [[HTML]] の [DFN[[CODE(HTMLe)[object]] 要素型]]は、
HTML 文書に[RUBY[[[物体]]] [オブジェクト]]を埋込むための一般的な仕組みを提供しています。
* 代替
[225] 専用の[[要素]]が追加され[[プラグイン]]が衰退した現在、
[CODE(HTMLe)@en[[[object]]]] [[要素]]は徐々に使われなくなっています。
[230] それぞれ専用の[[要素]]の方が、用途に特化して使いやすく設計されています。
[FIG(switch)[
:[226] [[動画]]:
[CODE(HTMLe)@en[[[video]]]] [[要素]]を使うべきです。
:[227] [[音声]]:
[CODE(HTMLe)@en[[[audio]]]] [[要素]]を使うべきです。
:[228] [[画像]]:
[CODE(HTMLe)@en[[[img]]]] [[要素]]を使うべきです。
[[SVG]] は [CODE(XMLe)@en[[[svg]]]] [[要素]]で直接埋め込むか、
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
:[229] [[HTML文書]]の埋め込み ([[フレーム]]):
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
: [[Flash]] :
[[JavaScript]] を使うべきです。
: [[PDF]] :
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
: [[テキストファイル]] :
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]を使うべきです。
]FIG]
[264]
[CODE(HTMLe)@en[object]] [[要素]]を使うこと自体に問題はありませんが、
そのメリットは特にありません。現在となっては[[相互運用性]]も代替手段の方が高くなっています。
* 仕様書
[REFS[
- [3] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#the-object-element>
]REFS]
* 意味
[182] [CODE(HTMLe)@en[[[object]]]] [[要素]]は、次のいずれかを[[表現]]します。
[FIG(list)[
- [[プラグイン]]
-- [CODE(HTMLa)@en[[[type]]]] [[属性]]により決まるもの
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]で決まるもの
-- [CODE(HTMLa)@en[[[classid]]]] [[属性]]により決まるもの
- [[入れ子閲覧文脈]]
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]で決まるもの
- [[画像]]
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]で決まるもの
- [[フォールバック内容]]
-- 他の条件に合致しない場合
-- [[実現値化]]するべき前提条件を満たさない場合
-- [[プラグイン]]がエラーを報告した場合
-- [[画像無効]]の場合
-- [CODE(HTMLa)@en[[[src]]]] [[属性]]で指定された[[資源]]でまだ処理方法を決定できない状態
-- [[利用者]]が特に望んだ場合
]FIG]
*
[6]
:[[開始タグ]]:必須
:[[終了タグ]]:必須
:[[属性]]:
,属性名 ,属性値 ,既定値 ,説明 ,状態 ,出典
,[CODE(HTMLa)[[[accesskey]]]] , , , ,非標準
,[CODE(HTMLa)[[[align]]]] , , ,揃え位置 ,[HTML 4] 非推奨
,[CODE(HTMLa)@en[[[alt]]]] ,[CODE(SGML)@en[%[[Text]]]] ,(なし) ,[[代替文]] ,非標準
,[CODE(HTMLa)[[[archive]]]] ,[CODE(ABNF)[[CODE(SGML)[ [%[[URI]]]] *(*[[s]] [CODE(SGML)[%URI]])] ]] , , ,[HTML 4]
,[CODE(HTMLa)[[[border]]]] , , ,境界線 ,非標準
,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,[HTML4] %[[coreattr]]
,[CODE(HTMLa)[[[classid]]]] ,[CODE(SGML)[%[[URI]]]] , ,実装識別子 ,[HTML 4]
,[CODE(HTMLa)[[[code]]]] , , , ,非標準
,[CODE(HTMLa)[[[codebase]]]] ,[CODE(SGML)[%[[URI]]]] ,(継承) ,基底 URI ,[HTML 4]
,[CODE(HTMLa)[[[codetype]]]] ,[CODE(SGML)[%[[ContentType]]]] , ,符号内容型 ,[HTML 4]
,[CODE(HTMLa)@en[[[content-length]]]],,,,[[W3C]] [[WD]],[[XHTML2]]
,[CODE(HTMLa)@en[[[copyright]]]] , , , ,非標準,[[EMOBILE]]
,[CODE(HTMLa)[[[data]]]] ,[CODE(SGML)[%[[URI]]]] , ,データ URI ,[HTML 4]
,[CODE(HTMLa)[[[datafld]]]] , , ,データ欄 ,非標準
,[CODE(HTMLa)[[[datasrc]]]] ,[CODE(SGML)[%[[URI]]]] , ,データ源 ,非標準
,[CODE(HTMLa)[[[declare]]]] ,([[真偽値属性]]) ,(偽) ,宣言のみ ,[HTML 4]
,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,[HTML4] %[[i18n]]
,[CODE(HTMLa)[[[height]]]] ,[CODE(SGML)[%[[Length]]]] , ,高さ ,[HTML 4]
,[CODE(HTMLa)[[[hspace]]]] , , ,水平余白 ,[HTML 4] 非推奨
,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,[HTML4] %coreattr
,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,[HTML4] %i18n
,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML1]
,[CODE(HTMLa)[[[longdesc]]]] ,[CODE(SGML)[%[[URI]]]] ,(なし) ,説明文書 ,[HTML 4]
,[CODE(HTMLa)@en[[[mediaout]]]],,[CODE(HTML)@en[[[no]]]],,非標準,[[EMOBILE]]
,[CODE(HTMLa)[[[name]]]] , ,(なし) ,名前 ,[HTML 4]
,[CODE(HTMLa)[[[onclick]]]] , , , ,[HTML4] %[[events]]
,[CODE(HTMLa)[[[ondblclick]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onkeydown]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onkeypress]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onkeyup]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmousedown]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmousemove]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmouseout]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmouseover]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmouseup]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)@en[[[private]]]],,[CODE(HTML)@en[[[no]]]],,非標準,[[EMOBILE]]
,[CODE(XMLa)[[QN[slide:[VAR[*]]] [[[http://www.w3.org/Consortium/Offices/Presentations/xsltSlidemaker]]]]]] , , ,
,[CODE(HTMLa)[[[standby]]]] ,[CODE(SGML)[%[[Text]]]] , ,読込み中メッセージ ,[HTML 4]
,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,[HTML4] %coreattr
,[CODE(HTMLa)[[[tabindex]]]] ,[CODE(SGML)[[[NUMBER]]]] ,(自動) ,タブ順 ,[HTML 4]
,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,[HTML4] %coreattr
,[CODE(HTMLa)[[[type]]]] ,[CODE(SGML)[%[[ContentType]]]] , ,データ内容型 ,[HTML 4]
,[CODE(HTMLa)[[[usemap]]]] , ,(なし) ,[[クライアント側画像写像]] ,[HTML 4]
,[CODE(HTMLa)@en[[[viewastext]]]] ,([[真偽値属性]]) ,([[偽]]) , ,非標準
,[CODE(HTMLa)@en[[[vjscodebase]]]] ,[CODE(SGML)@en[%[[URI]]]] ,(なし) , ,非標準 ,[[Visual J# .NET]]
,[CODE(HTMLa)[[[vspace]]]] , , ,垂直余白 ,[HTML 4] 非推奨
,[CODE(HTMLa)[[[width]]]] ,[CODE(SGML)[%Length]] , ,幅 ,[HTML 4]
,[CODE(XMLa)[[[xmlns]]]] ,[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] 固定 ,== ,[[名前空間名]] ,W3C 勧告 ,[[XHTML m12n]]
* 内容
[218] [CODE(HTMLe)@en[[[object]]]] [[要素]]の[[内容]]は、
[[フォールバック内容]]として使われます。
これは指定された[[資源]]がエラーで表示できない時に使われるものです。
[[著者]]は [CODE(HTMLe)@en[[[object]]]] [[要素]]を入れ子にすることで、
異なる能力を持つ[[利用者エージェント]]にそれぞれ適切な[[資源]]を表示させることができます。
[SRC[>>17]]
;; [219] しかしこれは [[fingerprinting vector]] です。
[233] [[内容]]としては、[[フォールバック内容]]の前に任意の個数の
[CODE(HTMLe)@en[[[param]]]] [[要素]]を置くことができます。これは[[プラグイン]]の[[引数]]として使われます。
;; [CODE(HTMLe)@en[[[embed]]]] [[要素]]の[[プラグイン]]依存の[[属性]]に相当します。
[234] 仕様上は明確に禁止されているわけではありませんが、
[CODE(HTMLe)@en[[[object]]]] [[要素]]が[[プラグイン]]以外として使われる場合、
[CODE(HTMLe)@en[[[param]]]] [[要素]]は意味を持ちませんから、
[[著者]]は含めるべきではありません。
[242] 更に、各 [[Webブラウザー]]が [[Flash]] (と [[PDF]]) 以外の[[プラグイン]]への対応を打ち切ったことにより、
[CODE(HTMLe)@en[[[param]]]] [[要素]]も [[Flash]] 用のもの以外は意義を失いました。
* 出現する文脈
[10] [CODE(HTMLe)[object]] は [CODE(SGML)[%[[inline]]]]
が使える場所だけでなく、 [CODE(HTMLe)[[[head]]]]
内に入れることもできます。
この場合、 [[UA]] は普通 [CODE(HTMLe)[head]] をレンダリングしないので、
著者はレンダリングされ得るデータを指定しないように注意するべきです。 [HTML 4]
[[#comment]]
** レンダリング
[12]
仕様書: [[HTML 4]] 13.3.1 Rules for rendering objects
<IW:HTML4:"struct/objects.html#idx-object-3">
[13] [[UA]] は、
= まず、 [CODE(HTMLe)[object]] をレンダリングしようと試みなければなりません。
-- [[内容]]をレンダリングするべきではありません。
(ということはしても間違いではないのか。)
-- [CODE(HTMLe)[[[param]]]] や [CODE(HTMLe)[[[map]]]] が子供にいないか確認しないといけません。
= 何らかの理由 (しないように設定、資源不足、体系が間違いなど)
でレンダリングできないときには内容をレンダリングしようと試みなければなりません。
[[#comment]]
** フォーム制御子
[45]
[[Web Forms 2.0]] は [[HTML 4]] の [CODE(HTMLe)@en[[[object]]]]
as form control にまったく言及がないわけですが、
[[Web Forms 2.0]] は [[HTML 4]] の拡張であって置き換えではないので、
依然 [CODE(HTMLe)@en[[[object]]]] as form control
も使えるのだそうな。
;; [CITE@en[[whatwg] WebForms 2.0 and object controls]]
<http://listserver.dreamhost.com/pipermail/whatwg-whatwg.org/2005-April/003596.html>
[46]
でも既存の[[フォーム制御子]]の一覧
<IW:WF2:"#existing">
にも[[フォーム制御子]]の定義
<IW:WF2:"#form-control">
にも [CODE(HTMLe)@en[[[object]]]]
は言及されていない件。
[[#comment]]
** 他との関係
[8] [CODE(HTMLe)[object]] 要素は HTML への他の物体
(画像、音声、プログラム、HTML 文書、その他)
の埋込みのための汎用の仕組みとして標準化されました。
[CODE(HTMLe)[[[img]]]], [CODE(HTMLe)[[[applet]]]],
[CODE(HTMLe)[[[iframe]]]], [CODE(HTMLe)[[[embed]]]],
その他同種の独自拡張の代替として使用できます。
[11] [CODE(HTMLa)[[[classid]]]] によって実装を、
[CODE(HTMLa)[[[data]]]] によってデータを指定することができますが、
両方指定した場合の挙動は未定義です。
可搬性のため、実装への追加データには [CODE(HTMLe)[param]]
を使うべきです。 [SUP[ [HTML 4] ]]
[29]
[CODE(HTMLa)[usemap]] 属性を指定した場合は特別な扱いが規定されています ([HTML 4] <IW:HTML4:"struct/objects.html#adef-coords">)。
詳しくは [CODE(HTMLa)[[[usemap]>>17]]]
をみてください。
([[名無しさん]])
[[#comment]]
*** HTML 文書の埋込み
[25] 文書を参照する際に、単に[[リンク]]するだけでなく、
文書中に埋込みたいと思うことがあります。
そのような場合には、 [CODE(HTMLe)[object]] 要素型か
[CODE(HTMLe)[[[iframe]]]] 要素型が使えます。
しかし、 [CODE(HTMLe)[object]] と [CODE(HTMLe)[iframe]]
には幾つか異なる点があります。 [SUP[ [HTML 4] ]]
[CODE(HTMLe)[iframe]] は
- [[内容模型]]が異なります。
- 対象[RUBY[[[枠]]] [[[フレーム]]]]となることができます。
- [[UA]] で[Q[選択]]できます。
(選択すると印刷、 HTML ソース閲覧などの焦点を得ます。)
-- 選ばれた枠は選ばれていない枠と違ってレンダリングできます。
(例えば選択した枠の周りに枠線を描くとかです。)
前2者はともかく、最後の1つは、こんなこと仕様書に書かれちゃうと
[CODE(HTMLe)[object]] を甚だ不便に実装しなければならないことになってしまいます。
どうしてこんなおかしなことを書いてしまったのでしょう?
([[WinIE 5]] では [CODE(HTMLe)[iframe]] と HTML 文書の [CODE(HTMLe)[object]]
を同じように扱っているように見えます。 [[WinIE 4]] でもおそらくそうでしょう。
仕様書の筆者は何を考えていたのでしょうか。)
[26] 埋込まれた文書は親文書と完全に独立になります。
例えば、[[基底URI]] は継承されません。
たまたま表示されているのが窓全体ではなく他の文書の一部であったという程度です。
[SUP[ [HTML 4] ]]
[27] 自分自身を埋込んだ場合の UA の挙動は未定義です [SUP[ [HTML 4] ]]。
最低でも、無限循環に陥って利用者が手を出せなくなる事態は避けるべきでしょう。
* [CODE(DOMi)@en[HTMLObjectElement]] インターフェイス
[212] [CODE(HTMLe)@en[[[object]]]] [[要素]]は、[[プラグイン]]を[[表現]]する場合で、
[[プラグイン]]がスクリプト可能インターフェイスを持つ場合は、
これを晒す[['''べきです''']] [SRC[>>17]]。
* 状態
[215] [[HTML要素]]としての状態、[[閲覧文脈包含子]]としての状態に加えて、次の [CODE(HTMLe)@en[[[object]]]]
[[要素]]固有の状態を持ちます。
[FIG(list members)[
:[[表現]]するもの:[[プラグイン]]か[[入れ子閲覧文脈]]か[[画像]]か[[フォールバック内容]]のいずれかです。
:[[プラグイン]]の[[実現値]]:[[プラグイン]]が[[実現値化]]されている場合、その[[実現値]]です。
]FIG]
* 処理
[18] 次の''いずれか''が発生した時、[[DOM操作タスク源]]の[[タスク]]を[[タスクキューに追加]]しなければなりません。[[キュー]]に[[タスク]]がある間および実行中には、
[[節点文書]]について [[delay the load event]] しなければ[['''なりません''']]。 [SRC[>>17]]
[FIG(list)[
- [19] [[要素]]が作成された時
- [20] [[要素]]が[[開いている要素のスタック]]から [[pop]] された時
- [21] [[要素]]が[[文書に挿入]]または[[文書から削除]]された時で、
[[開いている要素のスタック]]上には無い場合
- [22] [[節点文書]]が[[完全に活性]]かどうかが変わった時
- [23] [[祖先]]の [CODE(HTMLe)@en[[[object]]]] [[要素]]が[[フォールバック内容]]を表示するかしないか変化した時
- [24] [CODE(HTMLa)@en[[[classid]]]] [[属性]]が設定、変化、削除された時
- [32] [CODE(HTMLa)@en[[[classid]]]] [[属性]]が無い時で、
[CODE(HTMLa)@en[[[data]]]] [[属性]]が設定、変化、削除された時
- [37] [CODE(HTMLa)@en[[[classid]]]] [[属性]]も
[CODE(HTMLa)@en[[[data]]]] [[属性]]も無い時で、
[CODE(HTMLa)@en[[[type]]]] [[属性]]が設定、変化、削除された時
- [76] [[レンダリング中]]かどうかが変化した時
]FIG]
;; [80] [[祖先]]に[[媒体要素]]があるかどうかが変化した時は条件に入っていません。
[77] [[タスク]]は、[VAR[要素]]について次のようにしなければ[MUST[なりません']] [SRC[>>17]]。
[FIG(steps)[
= [78]
[FIG(list)[
- [259] [[利用者]]が[[フォールバック内容]]を表示するべきと設定している時
(例えばその方がより[[アクセス可能]]となると[[利用者]]が判断する場合)
- [81] [[祖先]]に[[媒体要素]]がある場合
- [82] [[祖先]]に[[フォールバック内容]]を表示''しない'' [CODE(HTMLe)@en[[[object]]]]
[[要素]]がある場合
- [83] [[閲覧文脈]]を持つ[[文書中]]に''ない''場合
- [84] [[節点文書]]が[[完全に活性]]で''ない''場合
- [85] [[開いている要素のスタック]]上にある場合
- [86] [[レンダリング中]]で''ない''場合
- [260] [VAR[要素]]について
[[Should element be blocked ''a priori'' by Content Security Policy?]] が
[[Blocked]] を返す場合
]FIG]
... のいずれかの場合、
== [79] [[フォールバック内容]]としての処理を行います。
= [87] それ以外の場合で、
[CODE(HTMLa)@en[[[classid]]]] [[属性]]が[[空文字列]]以外の値を持つ場合、
== [186] [CODE(HTMLa)@en[[[classid]]]] [[属性値]]による処理 (>>187) を行います。
= [90] それ以外の場合で、 [CODE(HTMLa)@en[[[data]]]] [[属性]]が[[空文字列]]以外の値を持つ場合は、
== [184] [CODE(HTMLa)@en[[[data]]]] [[属性値]]による処理 (>>185) を行います。
= [167] それ以外の場合で、
[CODE(HTMLa)@en[[[data]]]] [[属性]]がなく [CODE(HTMLa)@en[[[type]]]] [[属性]]がある場合、
== [169] [CODE(HTMLa)@en[[[type]]]] [[属性値]]による処理 (>>168) を行います。
= [172] それ以外の場合は、
== [173] [[フォールバック内容]]としての処理に移ります。
]FIG]
** fetch した資源の表示
[185] [CODE(HTMLa)@en[[[data]]]] [[属性値]]による処理は、次のようにしなければ[['''なりません''']]
[SRC[>>17]]。
[FIG(steps)[
= [91]
[FIG(list)[
- [92] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、
- [93] [[利用者エージェント]]が対応しない型で、
- [94] 適当な[[プラグイン]]がなければ、
]FIG]
... ここで終わって[[フォールバック内容]]としての処理に移っても構いません。
= [95] [CODE(HTMLa)@en[[[data]]]] [[属性値]]の[[URLの解決]]を行います。
= [96] 失敗した場合は、
== [97] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[error]]]]
:[[対象]]:[[要素]]
]FIG]
== [98] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [99] 次のような新しい[[要求]]を [[fetch]] する[['''べきです''']]。
[FIG(list members)[
[FIGCAPTION[
[[要求]]
]FIGCAPTION]
:[[URL]]:得られた[[絶対URL]]
:[[クライアント]]:[[要素]]の[[節点文書]]の [CODE(DOMi)@en[[[Window]]]]
の[[環境設定群オブジェクト]]
:[F[終点]]: [[空文字列]]
:[[[CODE(HTTP)@en[Origin]]ヘッダー省略フラグ]]:[[要素]]が[[閲覧文脈適用範囲起源]]を持たなければ、設定する
:[[credentialsモード]]:[CODE[[[include]]]]
:[[URL credentials利用フラグ]]:設定する
]FIG]
= [102] [[fetch]] の結果が利用可能なら、 [[fetch]] 後の処理に移ります。ここで終わります。
= [103] そうでなければ、[[フォールバック内容]]としての処理に移ります。ここで終わります。
]FIG]
[100] [[fetch]] は、 [[fetch]] によって実行される[[タスク]]の完了まで、
[[節点文書]]を [[delay the load event]] しなければ[['''なりません''']] [SRC[>>17]]。
[101] [[fetch]] が [[AppCache]] を使う場合、本 [[fetch]]
は[[子供閲覧文脈]]のためのものとはみなしません [SRC[>>17]]。
[104] ([[キャッシュ]]されているなど [SRC[>>17]]) [[fetch]] 結果が直ちに利用可能なら、
そのまま[[同期的]]に次の処理が行われます。そうでなければ、
[[fetch]] によって実行される[[タスク]]で [[fetch]] 後の処理が行われます。
[[利用者エージェント]]は十分なデータを受信した時点で利用可能になったと判断できます [SRC[>>17]]。
その具体的なタイミングは規定されていません。
;; [105] この処理全体が[[タスク]]として元の操作に対して[[非同期的]]に実行されること、
[[ネットワーク]]が関わる処理であることから、 >>104 の動作タイミングの違いが[[著者]]にどこまで観測可能かは謎です。
;; [183] [[非同期的]]に処理される場合は、利用可能になるまでの間、一時的に[[フォールバック内容]]を[[表現]]する状態となります。
[106] [[fetch]] 後の処理は、次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [107] 失敗した ([CODE(HTTP)[[[404]]]] や[[ネットワークエラー]]などの) 場合には、
== [108] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[error]]]]
:[[対象]]:[[要素]]
]FIG]
=== [109] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [110] 型の決定 (>>111) を行います。
= [140] 決定した型に基づき処理します (>>139)。
]FIG]
*** 型の決定
[111] 型の決定は、次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [112]
[FIG(list)[
- [113] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり
- [114] [CODE(HTMLa)@en[[[typemustmatch]]]] [[属性]]があり
- [115] [[資源]]が[[Content-Typeメタデータ]]を持ち
- [116] [CODE(HTMLa)@en[[[type]]]] [[属性値]]が[[ASCII大文字・小文字不区別]]で
[[Content-Typeメタデータ]]と一致する
]FIG]
... なら、その型を返して停止します。
= [117] [CODE(HTMLa)@en[[[typemustmatch]]]] [[属性]]があれば、
何も返さず停止します。
= [118] [[資源]]が[[Content-Typeメタデータ]]を持ち、
[[利用者エージェント]]が本[[資源]]に関して [CODE(HTTP)@en[[[Content-Type]]]]
に厳密に従うよう設定されている場合には、
その型を返して停止します。
(これは[[文書]]の[[Webサイト]]の意図と異なる[[プラグイン]]を埋め込まれた[[Webサイト]]が使おうとしているのですから、
[[脆弱性]]をもたらす危険性があります。)
= [119]
[FIG(list)[
- [120] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、
- [121] [[利用者エージェント]]が対応する型ではなく、
- [122] [[プラグイン]]が対応する型なら、
]FIG]
... その型を返して停止します。
= [123] [[資源]]が [[Content-Typeメタデータ]]を持つ場合、
== [124]
[FIG(list)[
- [125] [[Content-Typeメタデータ]]が [CODE(MIME)@en[[[text/plain]]]] で、
[[rules for text or binary]] が [CODE(MIME)@en[[[text/plain]]]]
以外を返す場合
- [126] [[Content-Typeメタデータ]]が [CODE(MIME)@en[[[application/octet-stream]]]] の場合
]FIG]
... のいずれかの場合には、
=== [130] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、値が
[CODE(MIME)@en[[[application/octet-stream]]]] 以外なら、
==== [129] それが[[プラグイン]]の対応する型か、
[CODE(MIME)@en[[[image/]]]] で始まる [[XML MIME型]]以外の型なら、
その型を返して停止します。
== [136] それ以外の場合には、
=== [128] [[Content-Typeメタデータ]]の型を返して停止します。
= [131] [[資源]]が [[Content-Typeメタデータ]]を持たない場合、
== [132] [CODE(HTMLa)@en[[[type]]]] [[属性]]があり、値が
[CODE(MIME)@en[[[application/octet-stream]]]] 以外なら、
その型を返して停止します。
== [133] [CODE(HTMLa)@en[[[type]]]] [[属性]]がなく、[[sniffed MIME type]]
が [CODE(MIME)@en[[[application/octet-stream]]]] 以外なら、
その型を返して停止します。
= [134] ([[リダイレクト]]後の) [[資源]]の [[URL]] を[[URLの構文解析]]して得られた
[[path]] が[[プラグイン]]の対応するパターンであれば、
その型を返して停止します。
= [135] 何も返しません。
]FIG]
;; [138] [[Content-Typeメタデータ]]における[[引数]]の扱いは不明瞭です。
;; [127] [CODE(MIME)@en[[[image/]]]] の比較は[[ASCII大文字・小文字不区別]]と思われます。
;; [137] [CODE(HTMLe)@en[[[embed]]]] 同様に[[拡張子]]が判定に使われますが、
優先度は低いようです。
*** 処理方法の決定
[139] 型を決定したら、[VAR[要素]]を次の通り処理しなければ[MUST[なりません]] [SRC[>>17]]。
[FIG(steps)[
= [141] 型が指定され、それが[[利用者エージェント]]の対応する型ではなく、
[[プラグイン]]が対応する型ではある場合、
== [202] [[fetch]] 結果による[[プラグイン]]の処理 (>>203) に移ります。ここで終わります。
= [146] それ以外で、型が [[XML MIME型]]の場合や、 [CODE(MIME)@en[[[image/]]]]
で始まらない場合は、
== [147] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] なら、
=== [148] [VAR[要素]]の[F[入れ子閲覧文脈]]を、[[閲覧文脈の作成]]の結果に設定します。
=== [149] [VAR[要素]]に [CODE(HTMLa)@en[name][閲覧文脈名]] [[属性]]があれば、
==== [155] [VAR[要素]]の[F[入れ子閲覧文脈]]の[F[閲覧文脈名]]を、
[VAR[要素]]の [CODE(HTMLa)@en[name][閲覧文脈名]] [[属性値]]に設定します。
== [152] [[資源]]の [[URL]] が [CODE(URI)@en[[[about:blank]]]] の場合、
=== [153] [[タスク]]を[[タスクキューに追加]]します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
== [150] [[資源]]の [[URL]] が [CODE(URI)@en[[[about:blank]]]] で''ない''場合、
=== [151] [[navigate]] します。
[FIG(list members)[
:[[資源]]:[[資源]]
:[[閲覧文脈]]:[[要素]]の[[入れ子閲覧文脈]]
:[[始点閲覧文脈]]:[[要素]]の[[節点文書]]の[[閲覧文脈]]
:[[置換有効]]:[[真]]
]FIG]
== [154] [[要素]]は、[[入れ子閲覧文脈]]を[[表現]]します。
= [156] それ以外で、型が [CODE(MIME)@en[[[image/]]]] で始まる場合で、
[[画像無効]]でない場合は、
== [252] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] 以外なら、
=== [253] [VAR[要素]]の[F[入れ子閲覧文脈]]について[[閲覧文脈を捨てる]]処理を実行します。
=== [254] [VAR[要素]]の[F[入れ子閲覧文脈]]を、 [CODE[null]] に設定します。
== [157] [[image sniffing]] を行います。
== [158] エラーや未対応のため[[レンダリング]]できない場合は、
=== [159] [[フォールバック内容]]としての処理に移り、停止します。
== [160] それ以外なら、
=== [161] [[要素]]は[[画像]]を[[表現]]します。
= [162] それ以外なら、
== [255] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] 以外なら、
=== [256] [VAR[要素]]の[F[入れ子閲覧文脈]]について[[閲覧文脈を捨てる]]処理を実行します。
=== [257] [VAR[要素]]の[F[入れ子閲覧文脈]]を、 [CODE[null]] に設定します。
== [163] [[フォールバック内容]]としての処理に移り、停止します。
= [164] [[要素]]の[[内容]]は、[[要素]]が[[表現]]するものの一部ではありません。
= [165] [[資源]]を[[完全に読み込んだ]]ら、[[タスク]]を[[タスクキュー]]に追加します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [166] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
]FIG]
[201] [[入れ子閲覧文脈]]を[[表現]]する場合には、
[FIG(list)[
- [220] [[入れ子閲覧文脈]]の[[活性文書]]が [[ready for post-load tasks]]
でない場合
- [221] [[入れ子閲覧文脈]]の[[活性文書]]を [[delay the load event]]
するものがある時
- [222] [[入れ子閲覧文脈]]が [[delaying [CODE(DOMe)@en[load]] events mode]]
の時
]FIG]
... は、 [[delay the load event]] しなければ[['''なりません''']] [SRC[>>17]]。
;; [223] [[同じ起源]]かどうかの検査は行われないようです。
[214] [[資源]]を[[完全に読み込む]]とは、[[文書]]の [[completely loaded]]
フラグが設定されることを言うと思われます。
** プラグインの表示
[187] [CODE(HTMLa)@en[[[classid]]]] [[属性値]]による処理は、
次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [88]
[FIG(list)[
- [195] [CODE(HTMLa)@en[[[classid]]]] [[属性値]]に適切な[[プラグイン]]がある場合で、
- [194] [[プラグインの砂箱化]]を行わないか、[[保安プラグイン]]化できる場合
]FIG]
... には、
== [189] その[[プラグイン]]を使う[['''べきです''']]。 [CODE(HTMLa)@en[[[data]]]]
[[属性]]があれば、値を[[プラグイン]]に引き渡す[['''べきです''']]。
== [190] [[プラグイン]]がエラーを報告した場合、
=== [193] [[フォールバック内容]]としての処理に移ります。
= [89] それ以外の場合には、
== [191] [[フォールバック内容]]としての処理に移ります。
]FIG]
;; [192] [CODE(DOMe)@en[[[load]]]] [[イベント]]は[[発火]]されないようです。
;; [199] [[プラグイン]]が [CODE(HTMLa)@en[[[data]]]] [[属性]]の [[URL]]
を [[fetch]] するかもしれませんが、 [[Webブラウザー]]自体は行いません。
[168] [CODE(HTMLa)@en[[[type]]]] [[属性値]]による処理は、
次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [188]
[FIG(list)[
- [170] [CODE(HTMLa)@en[[[type]]]] [[属性値]]の型に適切な[[プラグイン]]があり、
- [171] [[プラグインの砂箱化]]を行わないか、[[保安プラグイン]]化できる場合
]FIG]
... には、
== [174] その[[プラグイン]]を使う[['''べきです''']]。
== [175] [[プラグイン]]がエラーを報告した場合、
=== [176] [[フォールバック内容]]としての処理に移ります。ここで終わります。
== [177] [[プラグイン]]の読み込みが完了したら、
[[タスク]]を[[タスクキュー]]に追加します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [178] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
= [172] それ以外の場合は、
== [173] [[フォールバック内容]]としての処理に移ります。
]FIG]
;; [200] [CODE(HTMLa)@en[[[data]]]] [[属性]]が指定されている時には本処理は呼び出されません。
[203] [[fetch]] 結果による[[プラグイン]]の処理は、次のようにしなければ[['''なりません''']]
[SRC[>>17]]。
[FIG(steps)[
= [246] [VAR[要素]]の[F[入れ子閲覧文脈]]が [CODE[null]] 以外なら、
== [250] [VAR[要素]]の[F[入れ子閲覧文脈]]について[[閲覧文脈を捨てる]]処理を実行します。
== [251] [VAR[要素]]の[F[入れ子閲覧文脈]]を、 [CODE[null]] に設定します。
= [204] [[プラグインの砂箱化]]を行わないか、[[保安プラグイン]]化できる場合には、
== [145] 型に対応した[[プラグイン]]を使う[['''べきです''']]。
[[資源]]をその[[プラグイン]]に引き渡す[['''べきです''']]。
== [197] [[プラグイン]]がエラーを報告したら、
=== [198] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [205] それ以外の場合には、
== [143] [[フォールバック内容]]としての処理に移ります。ここで終わります。
= [142] [[要素]]の[[内容]]は、[[要素]]が[[表現]]するものの一部ではありません。
= [144] [[資源]]が完全に読み込まれたら、[[タスク]]を[[タスクキュー]]に追加します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:処理:
[FIG(steps)[
= [206] [[単純イベントを発火]]します。
[FIG(list members short)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[要素]]
]FIG]
]FIG]
]FIG]
]FIG]
[207] [[プラグイン]]の[[実現値化]]の際には、次の名前と値の組の[[リスト]]を[[プラグイン]]に渡す[['''べき''']]です [SRC[>>17]]。
[FIG(list)[
= [208] [[属性]]の名前と値。追加順/ソース順。
= [209] 名前 [CODE[[[PARAM]]]], 値 [[null]]。
= [210] [[子要素]] [CODE(HTMLe)@en[[[param]]]] による[[引数]]の名前と値。[[木順]]。
]FIG]
;; [213] [CODE(HTMLe)@en[[[embed]]]] [[要素]]では[[null名前空間]]の[[属性]]に限定されていますが、
こちらではなぜか限定されていません。
[211] [[要素]]は、[[プラグイン]]を[[表現]]します [SRC[>>17]]。
[216] [[プラグインの砂箱化]]を行う場合で[[保安プラグイン]]化できない場合に、
[CODE(HTMLe)@en[[[embed]]]] [[要素]]では[[利用者]]がそれでも[[実現値化]]することを選択できるとされていますが、
[CODE(HTMLe)@en[[[object]]]] [[要素]]ではそのような規定がありません。
** フォールバック内容の表示
[179] [[フォールバック内容]]として処理する場合、[[要素]]は
[CODE(HTMLe)@en[[[object]]]] [[要素]]の[[子供]]を[[表現]]します。
ただし先頭の [CODE(HTMLe)@en[[[param]]]] [[要素]]は (あれば) 無視します。 [SRC[>>17]]
[180] その場合、[[実現値化]]された[[プラグイン]]があれば、 [[unload]]
しなければ[['''なりません''']] [SRC[>>17]]。
;; [181] [[入れ子閲覧文脈]]は破棄しないようです。
** 伝播
[196] 次の処理は、 [CODE(HTMLe)@en[[[object]]]] [[要素]]が[[フォールバック内容]]を[[表現]]するかどうかに影響されます。
[CODE(HTMLe)@en[[[object]]]] [[要素]]が[[表現]]するものが変化した場合は、
次の処理も行う必要があります。
[FIG(list)[
- [[子孫]] [CODE(HTMLe)@en[[[embed]]]] [[要素]]
- [[子孫]] [CODE(HTMLe)@en[[[object]]]] [[要素]]
- [[子孫]] [CODE(HTMLe)@en[[[applet]]]] [[要素]]
]FIG]
* [CODE(DOMi)@en[HTMLObjectElement]] インターフェイス
[243] [CODE(HTMLe)@en[object]] [[要素]]の[[要素インターフェイス]]は、
[CODE(DOMi)@en[HTMLObjectElement]] [[インターフェイス]]です。
[244] [CODE(DOMi)@en[HTMLObjectElement]] [[インターフェイス]]には、
次のメンバーがあります。
[FIG(list short)[
- [CODE(DOMa)@en[contentDocument]]
- [CODE(DOMa)@en[contentWindow]]
]FIG]
* 安全性
[34] [CODE(HTMLe)[[[img]]]] 要素型の安全性の項もご覧下さい。
[36]
[CITE[スラッシュドット ジャパン | IEのobjectタグにクラッシュや任意コード実行可能な脆弱性]] <http://slashdot.jp/security/05/07/01/2355213.shtml?topic=41>
([[名無しさん]] [WEAK[2005-07-07 14:21:21 +00:00]])
* 歴史
** HTML4
[235] [[HTML4]] では、任意の[[オブジェクト]]の埋め込みの方法として
[CODE(HTMLe)@en[[[object]]]] [[要素]]が定義されていました。
[236] どんなものにも使えることになっていましたが、規定されていたのはそれだけで、
詳細は実装に委ねられていました。汎用性が高いといえば聞こえはいいですが、
標準化を放棄したというのが正確なところでした。
[237] [[HTML4]] の開発初期には [CODE(HTMLe)@en[[[img]]]] [[要素]]を[[廃止]]または[[非推奨]]として
[CODE(HTMLe)@en[[[object]]]] [[要素]]に統合することが検討されていたそうです。
過激な[[著者]]の中にはそれに従って [CODE(HTMLe)@en[[[img]]]]
[[要素]]を [CODE(HTMLe)@en[[[object]]]] [[要素]]に置き換えている人もいましたが、
当時はそれを正しく表示させられる[[Webブラウザー]]などありませんでした。
[238] [CODE(HTMLe)@en[[[object]]]] [[要素]]は、 [[HTML4]] の規定はともかく、
実際上は [[IE]] で [[ActiveX control]] を表示するための[[要素]]としてしか使えませんでした。
[5] 仕様書:
- [[HTML 4]]
-- 13.1 Introduction to objects, images, and applets
<IW:HTML4:"struct/objects.html#h-13.1">
-- 13.3 Generic inclusion: the [CODE(HTMLe)[OBJECT]] element
<IW:HTML4:"objects.html#edef-OBJECT">
-- 13.5 Notes on embedded documents
<IW:HTML4:"struct/objects.html#embedded-documents">
[9] 多くの [[WWWブラウザ]]は自前で HTML や画像などを解釈することができますし、
そうでない形式では他のプログラムを起動して処理させるなどすることができます。
[CODE(HTMLe)[object]]
を使うと外部のプログラムを起動するか著者の指定したプログラムを使うか、
といったようなことを記述できます。 [HTML 4]
ほとんどの場合著者は次の3種類の情報を指定する必要があります。
常に3種類とも必要ではなく、場合によっていろいろです。 [HTML 4]
- 取込む物体の実装。例えば、時計アプレットであればアプレットの実行可能符号の場所。
- レンダリングするデータ。例えば、フォント・データをレンダリングするプログラムなら、
フォント・データの場所。
- 実行時の追加の引数。例えば、アプレットの初期値。
前2者は属性、引数は子 [CODE(HTMLe)[[[param]]]] 要素を使います。
** 要素の内容
[7] [CODE(HTMLe)[object]] 要素の内容は HTML 4 DTD
では [CODE(SGML)[([CODE(HTMLe)[param]] | %[[flow]];)*]]
とされていますが、仕様書本文の規定により
[CODE(HTMLe)[param]] は他の内容よりも前に来なければなりません。
こうしているのは SGML DTD で直接表現することが困難だからです。
仕様書の記述を超厳密に解釈するなら、どんな[Q[内容]]も
[CODE(HTMLe)[param]] の前に来れないのですから、
[[空白]]や[[注釈宣言]]なども来てはいけないことになってしまいますが、
それではわざわざ DTD で不正確に表現している意味がありませんから、
他の要素や非空白文字を制限していると解釈するのが妥当でしょう。
[14] [CODE(HTMLe)[[[head]]]] 内の [CODE(HTMLe)[object]]
では内容を含めるべきではありません。 [HTML 4]
[Q[べき]]だから禁止じゃないのか・・・。
[CODE(HTMLe)[param]] も入れないべきなのでしょうかねぇ。
[15] 内容には [CODE(HTMLe)[object]]
をレンダリングできないときの[[代替文]]を入れるべきです。 [HTML 4]
[31]
HTML 4 DTD の[[注釈]] (参考) には
[Q[PARAM elements should precede other content. SGML mixed content model technicality precludes specifying this formally ...]]
([CODE(HTMLe)[param]] は他の内容の前に来るべきです。 SGML の[[混合内容模型]]ではこれを形式的に記述できません。。。)
と書かれています。
([[名無しさん]] [sage])
[39]
'''なぜ行内要素の[CODE(HTMLe)@en[object]]の内容が[CODE(SGML)@en[%[[flow]];]]なのか'''
どうして[[HTML 4]]で[[行内要素]]である[CODE(HTMLe)@en[[[object]]]]の[[内容]]として[[ブロック水準要素]]が認められているのでしょうか?
仕様書案をたどってみると、最初のまだ[[要素型名]]が[CODE(HTMLe)@en[[[insert]]]]であった頃から、[[内容モデル]]は実質的に変わっていないことがわかります。
[[HTML]]は歴史的に[[ブロック水準要素]]なしに[[行内要素]]や[[文字データ]]が現れることを許容してきましたから、
はじめのうちは不自然なことではありませんでした。
しかし、[[HTML 4]]案の途中から[[移行用DTD]]と[[厳密DTD]]の区別が導入されて、[[厳密DTD]]では[CODE(HTMLe)@en[[[body]]]][[要素]]の[[子供]]として[[行内要素]]を置くことができなくなりました。
[CODE(HTMLe)@en[[[object]]]]は[[行内要素]]に分類されたので、
[CODE(HTMLe)@en[[[body]]]][[要素]]の[[子供]]にはなれず、
[[ブロック水準要素]]を介した[[孫]]以下としなければならなくなりました。ところが、
[WEAK[([CODE(HTMLe)@en[[[blockquote]]]]とは違って)]]
[CODE(HTMLe)@en[[[object]]]]の[[内容モデル]]は変更されませんでした。
;;
ちなみに、[[HTML 2.0]]では[CODE(SGML)@en[%[[HTML.Recommended]];]]な時でも[CODE(HTMLe)@en[[[body]]]][[要素]]の[[子供]]になり得る[[要素型]]に[CODE(HTMLe)@en[[[img]]]]も含まれていました。
[217] 歴史的変遷: <http://suika.fam.cx/www/2004/html/classes>
** XHTML2 と画像の埋め込み
[63] 遅れてきた春、 [[XHTML2]] の最初の[[作業原案]]では [CODE(HTMLe)@en[[[object]]]]
[[要素]]が[[画像]]の埋め込みに使える唯一の[[要素]]でした。
;; [CITE@en[- XHTML Object Module]] ([TIME[2002-08-06 00:20:43 +09:00]] 版) <http://www.w3.org/TR/2002/WD-xhtml2-20020805/mod-object.html>
[64] しかしそれもつかの間、すべての[[要素]]に [CODE(HTMLa)@en[[[src]]]]
[[属性]]が追加され、更になぜか [CODE(HTMLe)@en[[[img]]]] [[要素]]まで復活しました。
** 不思議解釈
[1] [[[CODE(HTMLe)[object]] hack]]
[2] ''(・▽・)えすともほめぱげ(・▽・)(2004-02-10)'' <http://plum.sakura.ne.jp/~s-tomo/tdiary/?date=20040210#p01>:
一見標準の皮をかぶった [CODE(HTMLe)[object]] 要素。だけどそれは腐った WinIE 対策で、
本命はその中の [CODE(HTMLe)[[[embed]]]] 要素が本命・・・という話。
(そんなときは [[W3C]] の XHTML 1.0 Transitional + embed DTD を使おう!
[CODE(WikiPage)[[[embed]]]] 参照。)
[40]
[[RDF/XML]]を[[HTML]]に埋め込むために[CODE(HTMLe)@en[[[object]]]]を使えばよいとの意見もありますが、
[[[CODE(HTMLe)@en[object]] hack]]同様に濫用であって望ましくないです。
** <OBJECT> 宣言 (ASP)
[50]
[CITE[Global.asa ??????]] ([CODE[2007-02-18 11:36:39 +09:00]] 版) <http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpiis/iishelp/iis/htm/asp/glob822b.asp>
[38] >>50 より:
> <OBJECT> 宣言
>
拡張 <OBJECT> タグを使用して、セッション スコープまたはアプリケーション スコープを持つオブジェクトを Global.asa ファイルに作成できます。このタグは独立していて、すべての <SCRIPT> タグの外側にあります。
>
Global.asa ファイルで宣言されたオブジェクトは、そのオブジェクトを呼び出すスクリプトをサーバーが処理するまで作成されません。必要なオブジェクトだけしか作成されないため、リソースの節約になります。
>
構文
>
[PRE(example code)[
<OBJECT RUNAT=Server SCOPE=Scope ID=Identifier {PROGID="progID"|CLASSID="ClassID"}>
. . .
</OBJECT>
]PRE]
>
パラメータ
>
:Scope: オブジェクトのスコープを指定します。Global.asa ファイルで、Scope は「Session」または「Application」に設定されます。
:Identifier: オブジェクト インスタンスの名前を指定します。
:progID: クラス識別子に関連付けられた識別子です。<OBJECT> タグには ProgID または ClassID を指定する必要があります。ProgID の形式は [Vendor.]Component[.Version] です。
:ClassID: COM クラス オブジェクトに対して一意の識別子を指定します。<OBJECT> タグには ProgID または ClassID を指定する必要があります。
>
例
>
以下の例のうち、最初の例では ProgID パラメータを使用して、セッション スコープの MyConnection というオブジェクトを作成します。2 番目の例では、ClassID を使用します。
>
[PRE(example code)[
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection
PROGID="ADODB.Connection">
REM Object Script
</OBJECT>
]PRE]
>
[PRE(example code)[
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection
CLASSID="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
REM Object Script
</OBJECT>
]PRE]
>
解説
>
Global.asa で宣言されたオブジェクトは、アプリケーションの任意のスクリプトで使用できます。たとえば、次のオブジェクトを宣言したとします。
>
[PRE(example code)[
---GLOBAL.ASA---
<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.AdRotator">
</OBJECT>
]PRE]
>
この場合、MyAd オブジェクトはアプリケーションの任意のページから参照できます。
>
[PRE(example code)[
---SOME.ASP---
<%= MyAd.GetAdvertisement("/ads/adrot.txt") %>
]PRE]
** ガラケー
[239] [[ガラケー]]では、[[動画]]、[[音声]]、[[Javaアプレット]]、
その他[[ガラケー]]特有の機能を [[Webページ]]に埋め込むための方法として
[CODE(HTMLe)@en[[[object]]]] [[要素]]を使っていました。
;; [240] [[デスクトップブラウザー]]が実装しなかった
[CODE(HTMLa)@en[[[declare]]]] [[属性]]を使った機能もありました。
[241] こうした利用方法は [[HTML4]] の理論上の仕様とは一応整合するものでしたが、
[[IE]] の [[ActiveX control]] としての利用や他の[[Webブラウザー]]の [[NPAPI]]
[[プラグイン]]の利用とは互換性のない、完全に独自の利用方法でした。
埋め込まれているデータ形式も、[[ガラケー]]向けの独特の形式や[[プロファイル]]でした。
ですから、[[デスクトップブラウザー]]との互換性はまったくありませんでした。
* 例
[16] 時計アプレットの例
[PRE(HTML)[
<P><OBJECT classid="http://www.miamachina.it/analogclock.py">
An animated clock.
</OBJECT>
]PRE]
[WEAK[(HTML 4 仕様書より)]]
レンダリングできないときには代替文 [Q[An animated clock.]]
がレンダリングされます。
この場合 UA が解釈したらすぐに時計がレンダリングされますが、
先に宣言だけしておいてレンダリングを遅延させることができます。 [HTML 4]
[17] 色々な形式の例
[PRE(HTML)[
<P> <!-- 最初に Python アプレットを試す -->
<OBJECT title="宇宙から見た地球"
classid="http://www.observer.mars.example/TheEarth.py">
<!-- 駄目なら MPEG 動画を試す -->
<OBJECT data="TheEarth.mpeg" type="application/mpeg">
<!-- 駄目なら PNG 静止画像を試す -->
<OBJECT data="TheEarth.png" type="image/png">
<!-- 駄目なら文字列を表示 -->
宇宙から見た<STRONG>地球</STRONG>。
</OBJECT>
</OBJECT>
</OBJECT>
]PRE]
[WEAK[(HTML 4 仕様書より、改)]]
[33] [[SVG]] 画像の埋込みで、未対応なら代わりに
[[PNG]] 画像を使う例
[PRE(HTML example)[
<[CODE(HTMLe)[p]]><[CODE(HTMLe)[a]] [CODE(HTMLa)[name]]="figure41">
<[CODE(HTMLe)[object]] [CODE(HTMLa)[data]]="[CODE(URI)[figures/fig41.svg]]" [CODE(HTMLa)[type]]="[CODE(MIME)[image/svg+xml]]" [CODE(HTMLa)[height]]="290" [CODE(HTMLa)[width]]="640">
<[CODE(HTMLe)[img]] [CODE(HTMLa)[src]]="[CODE(URI)[png-figures/fig41.png]]" [CODE(HTMLa)[alt]]="Figure 4.1: Relationships between
source, reference, PNG, and display images" [CODE(HTMLa)[height]]="280" [CODE(HTMLa)[width]]="640">
</[CODE(HTMLe)[object]]>
</[CODE(HTMLe)[a]]></[CODE(HTMLe)[p]]>
]PRE]
出典:
[CITE[Portable Network Graphics (PNG) Specification (Second Edition)]]
<http://www.w3.org/TR/2003/REC-PNG-20031110/#figure41>
[28] HTML 文書を埋込む例
[PRE(HTML)[
...text before...
<OBJECT data="embed_me.html" type="text/html">
It is described in
<A href="embed_me.html" type="text/html">another document</A>.
</OBJECT>
...text after...
]PRE]
[WEAK[(HTML 4 仕様書より、改)]]
[51]
[CITE[ObjectTestResults - ESW Wiki]] ([CODE[2007-03-10 12:09:38 +09:00]] 版) <http://esw.w3.org/topic/ObjectTestResults>
([[名無しさん]])
[55]
[CITE@en[Object Tests - The Web Standards Project]] ([CODE[2007-03-21 13:55:52 +09:00]] 版) <http://www.webstandards.org/learn/articles/askw3c/may2005/object-tests/>
([[名無しさん]])
[[#comment]]
** メモ
[30]
[CODE[Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7) Gecko/20040803 Firefox/0.9.3]]
でありますが、 [[XSLT]] [[結果木]]に [CODE(HTMLe)[object]]
で他の HTML 文書を埋込むと、埋込んだ文書がなぜか強制的に [[UTF-8]] とみなされてしまいます。
([CODE(HTTP)[[[Content-Type]]]] に [CODE(MIME)[[[charset]]]] を指定しているのに無視されます。)
フレーム内の[[文字コード]]を強制指定する手段がないので[[文字化け]]を回避できません。
(埋込む文書も UTF-8 にするしかないと思われ。)
([[名無しさん]] [WEAK[2005-01-31 22:58:02 +00:00]])
[35]
- [[WebCGM]]
-- 第1版: [CITE[WebCGM Intelligent Content]]
<http://www.w3.org/TR/1999/REC-WebCGM-19990121/REC-03-CGM-IC#webcgm_3_4>
-- 第2版: [CITE[WebCGM Intelligent Content]]
<http://www.w3.org/TR/2001/REC-WebCGM-20011217/REC-03-CGM-IC.html#webcgm_3_4>
[41]
[CITE[OASIS CGM Open specification - WebCGM 2.0 - WebCGM Intelligent Content]] <http://www.w3.org/Submission/2006/SUBM-WebCGM20-20060313/WebCGM20-IC.html#webcgm_3_4>
([[名無しさん]] [sage])
[42]
[CITE[OASIS CGM Open specification - WebCGM 2.0 - WebCGM Intelligent Content]] <http://www.w3.org/Submission/2006/SUBM-WebCGM20-20060313/WebCGM20-IC.html#webcgm_3_4>