apis-in-html-documents.html
68.8 KB
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US-x-Hixie" ><head><title>3.3 APIs in HTML documents — HTML5 </title><style type="text/css">
pre { margin-left: 2em; white-space: pre-wrap; }
h2 { margin: 3em 0 1em 0; }
h3 { margin: 2.5em 0 1em 0; }
h4 { margin: 2.5em 0 0.75em 0; }
h5, h6 { margin: 2.5em 0 1em; }
h1 + h2, h1 + h2 + h2 { margin: 0.75em 0 0.75em; }
h2 + h3, h3 + h4, h4 + h5, h5 + h6 { margin-top: 0.5em; }
p { margin: 1em 0; }
hr:not(.top) { display: block; background: none; border: none; padding: 0; margin: 2em 0; height: auto; }
dl, dd { margin-top: 0; margin-bottom: 0; }
dt { margin-top: 0.75em; margin-bottom: 0.25em; clear: left; }
dt + dt { margin-top: 0; }
dd dt { margin-top: 0.25em; margin-bottom: 0; }
dd p { margin-top: 0; }
dd dl + p { margin-top: 1em; }
dd table + p { margin-top: 1em; }
p + * > li, dd li { margin: 1em 0; }
dt, dfn { font-weight: bold; font-style: normal; }
dt dfn { font-style: italic; }
pre, code { font-size: inherit; font-family: monospace; font-variant: normal; }
pre strong { color: black; font: inherit; font-weight: bold; background: yellow; }
pre em { font-weight: bolder; font-style: normal; }
@media screen { code { color: orangered; } code :link, code :visited { color: inherit; } }
var sub { vertical-align: bottom; font-size: smaller; position: relative; top: 0.1em; }
table { border-collapse: collapse; border-style: hidden hidden none hidden; }
table thead, table tbody { border-bottom: solid; }
table tbody th:first-child { border-left: solid; }
table tbody th { text-align: left; }
table td, table th { border-left: solid; border-right: solid; border-bottom: solid thin; vertical-align: top; padding: 0.2em; }
blockquote { margin: 0 0 0 2em; border: 0; padding: 0; font-style: italic; }
.bad, .bad *:not(.XXX) { color: gray; border-color: gray; background: transparent; }
.matrix, .matrix td { border: none; text-align: right; }
.matrix { margin-left: 2em; }
.dice-example { border-collapse: collapse; border-style: hidden solid solid hidden; border-width: thin; margin-left: 3em; }
.dice-example caption { width: 30em; font-size: smaller; font-style: italic; padding: 0.75em 0; text-align: left; }
.dice-example td, .dice-example th { border: solid thin; width: 1.35em; height: 1.05em; text-align: center; padding: 0; }
.toc dfn, h1 dfn, h2 dfn, h3 dfn, h4 dfn, h5 dfn, h6 dfn { font: inherit; }
img.extra { float: right; }
pre.idl { border: solid thin; background: #EEEEEE; color: black; padding: 0.5em 1em; }
pre.idl :link, pre.idl :visited { color: inherit; background: transparent; }
pre.css { border: solid thin; background: #FFFFEE; color: black; padding: 0.5em 1em; }
pre.css:first-line { color: #AAAA50; }
dl.domintro { color: green; margin: 2em 0 2em 2em; padding: 0.5em 1em; border: none; background: #DDFFDD; }
hr + dl.domintro, div.impl + dl.domintro { margin-top: 2.5em; margin-bottom: 1.5em; }
dl.domintro dt, dl.domintro dt * { color: black; text-decoration: none; }
dl.domintro dd { margin: 0.5em 0 1em 2em; padding: 0; }
dl.domintro dd p { margin: 0.5em 0; }
dl.switch { padding-left: 2em; }
dl.switch > dt { text-indent: -1.5em; }
dl.switch > dt:before { content: '\21AA'; padding: 0 0.5em 0 0; display: inline-block; width: 1em; text-align: right; line-height: 0.5em; }
dl.triple { padding: 0 0 0 1em; }
dl.triple dt, dl.triple dd { margin: 0; display: inline }
dl.triple dt:after { content: ':'; }
dl.triple dd:after { content: '\A'; white-space: pre; }
.diff-old { text-decoration: line-through; color: silver; background: transparent; }
.diff-chg, .diff-new { text-decoration: underline; color: green; background: transparent; }
a .diff-new { border-bottom: 1px blue solid; }
h2 { page-break-before: always; }
h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
h1 + h2, hr + h2.no-toc { page-break-before: auto; }
p > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]),
li > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]), { border-bottom: solid #9999CC; }
div.head { margin: 0 0 1em; padding: 1em 0 0 0; }
div.head p { margin: 0; }
div.head h1 { margin: 0; }
div.head .logo { float: right; margin: 0 1em; }
div.head .logo img { border: none } /* remove border from top image */
div.head dl { margin: 1em 0; }
div.head p.copyright, div.head p.alt { font-size: x-small; font-style: oblique; margin: 0; }
body > .toc > li { margin-top: 1em; margin-bottom: 1em; }
body > .toc.brief > li { margin-top: 0.35em; margin-bottom: 0.35em; }
body > .toc > li > * { margin-bottom: 0.5em; }
body > .toc > li > * > li > * { margin-bottom: 0.25em; }
.toc, .toc li { list-style: none; }
.brief { margin-top: 1em; margin-bottom: 1em; line-height: 1.1; }
.brief li { margin: 0; padding: 0; }
.brief li p { margin: 0; padding: 0; }
.category-list { margin-top: -0.75em; margin-bottom: 1em; line-height: 1.5; }
.category-list::before { content: '\21D2\A0'; font-size: 1.2em; font-weight: 900; }
.category-list li { display: inline; }
.category-list li:not(:last-child)::after { content: ', '; }
.category-list li > span, .category-list li > a { text-transform: lowercase; }
.category-list li * { text-transform: none; } /* don't affect <code> nested in <a> */
.XXX { color: #E50000; background: white; border: solid red; padding: 0.5em; margin: 1em 0; }
.XXX > :first-child { margin-top: 0; }
p .XXX { line-height: 3em; }
.annotation { border: solid thin black; background: #0C479D; color: white; position: relative; margin: 8px 0 20px 0; }
.annotation:before { position: absolute; left: 0; top: 0; width: 100%; height: 100%; margin: 6px -6px -6px 6px; background: #333333; z-index: -1; content: ''; }
.annotation :link, .annotation :visited { color: inherit; }
.annotation :link:hover, .annotation :visited:hover { background: transparent; }
.annotation span { border: none ! important; }
.note { color: green; background: transparent; font-family: sans-serif; }
.warning { color: red; background: transparent; }
.note, .warning { font-weight: bolder; font-style: italic; }
p.note, div.note { padding: 0.5em 2em; }
span.note { padding: 0 2em; }
.note p:first-child, .warning p:first-child { margin-top: 0; }
.note p:last-child, .warning p:last-child { margin-bottom: 0; }
.warning:before { font-style: normal; }
p.note:before { content: 'Note: '; }
p.warning:before { content: '\26A0 Warning! '; }
.bookkeeping:before { display: block; content: 'Bookkeeping details'; font-weight: bolder; font-style: italic; }
.bookkeeping { font-size: 0.8em; margin: 2em 0; }
.bookkeeping p { margin: 0.5em 2em; display: list-item; list-style: square; }
.bookkeeping dt { margin: 0.5em 2em 0; }
.bookkeeping dd { margin: 0 3em 0.5em; }
h4 { position: relative; z-index: 3; }
h4 + .element, h4 + div + .element { margin-top: -2.5em; padding-top: 2em; }
.element {
background: #EEEEFF;
color: black;
margin: 0 0 1em 0.15em;
padding: 0 1em 0.25em 0.75em;
border-left: solid #9999FF 0.25em;
position: relative;
z-index: 1;
}
.element:before {
position: absolute;
z-index: 2;
top: 0;
left: -1.15em;
height: 2em;
width: 0.9em;
background: #EEEEFF;
content: ' ';
border-style: none none solid solid;
border-color: #9999FF;
border-width: 0.25em;
}
.example { display: block; color: #222222; background: #FCFCFC; border-left: double; margin-left: 2em; padding-left: 1em; }
td > .example:only-child { margin: 0 0 0 0.1em; }
ul.domTree, ul.domTree ul { padding: 0 0 0 1em; margin: 0; }
ul.domTree li { padding: 0; margin: 0; list-style: none; position: relative; }
ul.domTree li li { list-style: none; }
ul.domTree li:first-child::before { position: absolute; top: 0; height: 0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; }
ul.domTree li:not(:last-child)::after { position: absolute; top: 0; bottom: -0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; }
ul.domTree span { font-style: italic; font-family: serif; }
ul.domTree .t1 code { color: purple; font-weight: bold; }
ul.domTree .t2 { font-style: normal; font-family: monospace; }
ul.domTree .t2 .name { color: black; font-weight: bold; }
ul.domTree .t2 .value { color: blue; font-weight: normal; }
ul.domTree .t3 code, .domTree .t4 code, .domTree .t5 code { color: gray; }
ul.domTree .t7 code, .domTree .t8 code { color: green; }
ul.domTree .t10 code { color: teal; }
body.dfnEnabled dfn { cursor: pointer; }
.dfnPanel {
display: inline;
position: absolute;
z-index: 10;
height: auto;
width: auto;
padding: 0.5em 0.75em;
font: small sans-serif, Droid Sans Fallback;
background: #DDDDDD;
color: black;
border: outset 0.2em;
}
.dfnPanel * { margin: 0; padding: 0; font: inherit; text-indent: 0; }
.dfnPanel :link, .dfnPanel :visited { color: black; }
.dfnPanel p { font-weight: bolder; }
.dfnPanel * + p { margin-top: 0.25em; }
.dfnPanel li { list-style-position: inside; }
#configUI { position: absolute; z-index: 20; top: 10em; right: 1em; width: 11em; font-size: small; }
#configUI p { margin: 0.5em 0; padding: 0.3em; background: #EEEEEE; color: black; border: inset thin; }
#configUI p label { display: block; }
#configUI #updateUI, #configUI .loginUI { text-align: center; }
#configUI input[type=button] { display: block; margin: auto; }
fieldset { margin: 1em; padding: 0.5em 1em; }
fieldset > legend + * { margin-top: 0; }
fieldset > :last-child { margin-bottom: 0; }
fieldset p { margin: 0.5em 0; }
.stability {
position: fixed;
bottom: 0;
left: 0; right: 0;
margin: 0 auto 0 auto !important;
z-index: 1000;
width: 50%;
background: maroon; color: yellow;
-webkit-border-radius: 1em 1em 0 0;
-moz-border-radius: 1em 1em 0 0;
border-radius: 1em 1em 0 0;
-moz-box-shadow: 0 0 1em #500;
-webkit-box-shadow: 0 0 1em #500;
box-shadow: 0 0 1em red;
padding: 0.5em 1em;
text-align: center;
}
.stability strong {
display: block;
}
.stability input {
appearance: none; margin: 0; border: 0; padding: 0.25em 0.5em; background: transparent; color: black;
position: absolute; top: -0.5em; right: 0; font: 1.25em sans-serif; text-align: center;
}
.stability input:hover {
color: white;
text-shadow: 0 0 2px black;
}
.stability input:active {
padding: 0.3em 0.45em 0.2em 0.55em;
}
.stability :link, .stability :visited,
.stability :link:hover, .stability :visited:hover {
background: transparent;
color: white;
}
</style><link href="data:text/css,.impl%20%7B%20display:%20none;%20%7D%0Ahtml%20%7B%20border:%20solid%20yellow;%20%7D%20.domintro:before%20%7B%20display:%20none;%20%7D" id="author" rel="alternate stylesheet" title="Author documentation only"><link href="data:text/css,.impl%20%7B%20background:%20%23FFEEEE;%20%7D%20.domintro:before%20%7B%20background:%20%23FFEEEE;%20%7D" id="highlight" rel="alternate stylesheet" title="Highlight implementation
requirements"><link href="http://www.w3.org/StyleSheets/TR/W3C-WD" rel="stylesheet" type="text/css"><style type="text/css">
.applies thead th > * { display: block; }
.applies thead code { display: block; }
.applies tbody th { whitespace: nowrap; }
.applies td { text-align: center; }
.applies .yes { background: yellow; }
.matrix, .matrix td { border: hidden; text-align: right; }
.matrix { margin-left: 2em; }
.dice-example { border-collapse: collapse; border-style: hidden solid solid hidden; border-width: thin; margin-left: 3em; }
.dice-example caption { width: 30em; font-size: smaller; font-style: italic; padding: 0.75em 0; text-align: left; }
.dice-example td, .dice-example th { border: solid thin; width: 1.35em; height: 1.05em; text-align: center; padding: 0; }
td.eg { border-width: thin; text-align: center; }
#table-example-1 { border: solid thin; border-collapse: collapse; margin-left: 3em; }
#table-example-1 * { font-family: "Essays1743", serif; line-height: 1.01em; }
#table-example-1 caption { padding-bottom: 0.5em; }
#table-example-1 thead, #table-example-1 tbody { border: none; }
#table-example-1 th, #table-example-1 td { border: solid thin; }
#table-example-1 th { font-weight: normal; }
#table-example-1 td { border-style: none solid; vertical-align: top; }
#table-example-1 th { padding: 0.5em; vertical-align: middle; text-align: center; }
#table-example-1 tbody tr:first-child td { padding-top: 0.5em; }
#table-example-1 tbody tr:last-child td { padding-bottom: 1.5em; }
#table-example-1 tbody td:first-child { padding-left: 2.5em; padding-right: 0; width: 9em; }
#table-example-1 tbody td:first-child::after { content: leader(". "); }
#table-example-1 tbody td { padding-left: 2em; padding-right: 2em; }
#table-example-1 tbody td:first-child + td { width: 10em; }
#table-example-1 tbody td:first-child + td ~ td { width: 2.5em; }
#table-example-1 tbody td:first-child + td + td + td ~ td { width: 1.25em; }
.apple-table-examples { border: none; border-collapse: separate; border-spacing: 1.5em 0em; width: 40em; margin-left: 3em; }
.apple-table-examples * { font-family: "Times", serif; }
.apple-table-examples td, .apple-table-examples th { border: none; white-space: nowrap; padding-top: 0; padding-bottom: 0; }
.apple-table-examples tbody th:first-child { border-left: none; width: 100%; }
.apple-table-examples thead th:first-child ~ th { font-size: smaller; font-weight: bolder; border-bottom: solid 2px; text-align: center; }
.apple-table-examples tbody th::after, .apple-table-examples tfoot th::after { content: leader(". ") }
.apple-table-examples tbody th, .apple-table-examples tfoot th { font: inherit; text-align: left; }
.apple-table-examples td { text-align: right; vertical-align: top; }
.apple-table-examples.e1 tbody tr:last-child td { border-bottom: solid 1px; }
.apple-table-examples.e1 tbody + tbody tr:last-child td { border-bottom: double 3px; }
.apple-table-examples.e2 th[scope=row] { padding-left: 1em; }
.apple-table-examples sup { line-height: 0; }
.details-example img { vertical-align: top; }
#base64-table {
white-space: nowrap;
font-size: 0.6em;
column-width: 6em;
column-count: 5;
column-gap: 1em;
-moz-column-width: 6em;
-moz-column-count: 5;
-moz-column-gap: 1em;
-webkit-column-width: 6em;
-webkit-column-count: 5;
-webkit-column-gap: 1em;
}
#base64-table thead { display: none; }
#base64-table * { border: none; }
#base64-table tbody td:first-child:after { content: ':'; }
#base64-table tbody td:last-child { text-align: right; }
#named-character-references-table {
white-space: nowrap;
font-size: 0.6em;
column-width: 30em;
column-gap: 1em;
-moz-column-width: 30em;
-moz-column-gap: 1em;
-webkit-column-width: 30em;
-webkit-column-gap: 1em;
}
#named-character-references-table > table > tbody > tr > td:first-child + td,
#named-character-references-table > table > tbody > tr > td:last-child { text-align: center; }
#named-character-references-table > table > tbody > tr > td:last-child:hover > span { position: absolute; top: auto; left: auto; margin-left: 0.5em; line-height: 1.2; font-size: 5em; border: outset; padding: 0.25em 0.5em; background: white; width: 1.25em; height: auto; text-align: center; }
#named-character-references-table > table > tbody > tr#entity-CounterClockwiseContourIntegral > td:first-child { font-size: 0.5em; }
.glyph.control { color: red; }
@font-face {
font-family: 'Essays1743';
src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743.ttf');
}
@font-face {
font-family: 'Essays1743';
font-weight: bold;
src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Bold.ttf');
}
@font-face {
font-family: 'Essays1743';
font-style: italic;
src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Italic.ttf');
}
@font-face {
font-family: 'Essays1743';
font-style: italic;
font-weight: bold;
src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-BoldItalic.ttf');
}
</style><style type="text/css">
.domintro:before { display: table; margin: -1em -0.5em -0.5em auto; width: auto; content: 'This box is non-normative. Implementation requirements are given below this box.'; color: black; font-style: italic; border: solid 2px; background: white; padding: 0 0.25em; }
</style><script type="text/javascript">
function getCookie(name) {
var params = location.search.substr(1).split("&");
for (var index = 0; index < params.length; index++) {
if (params[index] == name)
return "1";
var data = params[index].split("=");
if (data[0] == name)
return unescape(data[1]);
}
var cookies = document.cookie.split("; ");
for (var index = 0; index < cookies.length; index++) {
var data = cookies[index].split("=");
if (data[0] == name)
return unescape(data[1]);
}
return null;
}
</script>
<script src="link-fixup.js" type="text/javascript"></script>
<link href="style.css" rel="stylesheet"><link href="content-models.html" title="3.2.5 Content models" rel="prev">
<link href="spec.html#contents" title="Table of contents" rel="index">
<link href="semantics.html" title="4 The elements of HTML" rel="next">
</head><body><div class="head" id="head">
<div id="multipage-common">
<p class="stability" id="wip"><strong>This is a work in
progress!</strong> For the latest updates from the HTML WG, possibly
including important bug fixes, please look at the <a href="http://dev.w3.org/html5/spec/Overview.html">editor's draft</a> instead.
There may also be a more
<a href="http://www.w3.org/TR/html5">up-to-date Working Draft</a>
with changes based on resolution of Last Call issues.
<input onclick="closeWarning(this.parentNode)" type="button" value="╳⃝"></p>
<script type="text/javascript">
function closeWarning(element) {
element.parentNode.removeChild(element);
var date = new Date();
date.setDate(date.getDate()+4);
document.cookie = 'hide-obsolescence-warning=1; expires=' + date.toGMTString();
}
if (getCookie('hide-obsolescence-warning') == '1')
setTimeout(function () { document.getElementById('wip').parentNode.removeChild(document.getElementById('wip')); }, 2000);
</script></div>
<p><a href="http://www.w3.org/"><img alt="W3C" height="48" src="http://www.w3.org/Icons/w3c_home" width="72"></a></p>
<h1>HTML5</h1>
</div><div>
<a href="content-models.html" class="prev">3.2.5 Content models</a> –
<a href="spec.html#contents">Table of contents</a> –
<a href="semantics.html" class="next">4 The elements of HTML</a>
<ol class="toc"><li><ol><li><a href="apis-in-html-documents.html#apis-in-html-documents"><span class="secno">3.3 </span>APIs in HTML documents</a></li><li><a href="apis-in-html-documents.html#interactions-with-xpath-and-xslt"><span class="secno">3.4 </span>Interactions with XPath and XSLT</a></li><li><a href="apis-in-html-documents.html#dynamic-markup-insertion"><span class="secno">3.5 </span>Dynamic markup insertion</a>
<ol><li><a href="apis-in-html-documents.html#opening-the-input-stream"><span class="secno">3.5.1 </span>Opening the input stream</a></li><li><a href="apis-in-html-documents.html#closing-the-input-stream"><span class="secno">3.5.2 </span>Closing the input stream</a></li><li><a href="apis-in-html-documents.html#document.write"><span class="secno">3.5.3 </span><code title="dom-document-write">document.write()</code></a></li><li><a href="apis-in-html-documents.html#document.writeln"><span class="secno">3.5.4 </span><code title="dom-document-writeln">document.writeln()</code></a></li><li><a href="apis-in-html-documents.html#innerhtml"><span class="secno">3.5.5 </span><code title="dom-innerHTML">innerHTML</code></a></li><li><a href="apis-in-html-documents.html#outerhtml"><span class="secno">3.5.6 </span><code title="dom-outerHTML">outerHTML</code></a></li><li><a href="apis-in-html-documents.html#insertadjacenthtml"><span class="secno">3.5.7 </span><code title="dom-insertAdjacentHTML">insertAdjacentHTML()</code></a></li></ol></li></ol></li></ol></div>
<h3 id="apis-in-html-documents"><span class="secno">3.3 </span>APIs in HTML documents</h3><p>For <a href="dom.html#html-documents">HTML documents</a>, and for <a href="infrastructure.html#html-elements">HTML
elements</a> in <a href="dom.html#html-documents">HTML documents</a>, certain APIs defined
in DOM Core become case-insensitive or case-changing, as sometimes
defined in DOM Core, and as summarized <span class="impl">or
required</span> below. <a href="references.html#refsDOMCORE">[DOMCORE]</a></p><p>This does not apply to <a href="dom.html#xml-documents">XML documents</a> or to elements
that are not in the <a href="namespaces.html#html-namespace-0">HTML namespace</a> despite being in
<a href="dom.html#html-documents">HTML documents</a>.</p><dl><dt><code title="dom-Element-tagName"><a href="infrastructure.html#dom-element-tagname">Element.tagName</a></code> and <code title="dom-Node-nodeName">Node.nodeName</code></dt>
<dd>
<p>These attributes <span class="impl">must</span> return element
names <a href="infrastructure.html#converted-to-ascii-uppercase">converted to ASCII uppercase</a>, regardless of the case
with which they were created.</p>
</dd>
<dt><code title="dom-Document-createElement"><a href="infrastructure.html#dom-document-createelement">Document.createElement()</a></code></dt>
<dd>
<p>The canonical form of HTML markup is all-lowercase; thus, this
method will <a href="infrastructure.html#converted-to-ascii-lowercase" title="converted to ASCII lowercase">lowercase</a>
the argument before creating the requisite element. <span class="impl">Also, the element created must be in the <a href="namespaces.html#html-namespace-0">HTML
namespace</a></span>.</p>
<p class="note">This doesn't apply to <code title="dom-Document-createElementNS"><a href="infrastructure.html#dom-document-createelementns">Document.createElementNS()</a></code>.
Thus, it is possible, by passing this last method a tag name in
the wrong case, to create an element that appears to have the same
tag name as that of an element defined in this specification when
its <code title="dom-Element-tagName"><a href="infrastructure.html#dom-element-tagname">tagName</a></code> attribute is
examined, but that doesn't support the corresponding interfaces.
The "real" element name (unaffected by case conversions) can be
obtained from the <code title="dom-Node-localName"><a href="infrastructure.html#dom-node-localname">localName</a></code> attribute.</p>
</dd>
<dt><code title="dom-Element-setAttribute">Element.setAttribute()</code></dt>
<dt><code title="dom-Element-setAttributeNode">Element.setAttributeNode()</code></dt>
<dd>
<p>Attribute names are <a href="infrastructure.html#converted-to-ascii-lowercase">converted to ASCII lowercase</a>.</p>
<div class="impl">
<p>Specifically: when an attribute is set on an <a href="infrastructure.html#html-elements" title="HTML
elements">HTML element</a> using <code title="">Element.setAttribute()</code>, the name argument must be
<a href="infrastructure.html#converted-to-ascii-lowercase">converted to ASCII lowercase</a> before the element is
affected; and when an <code><a href="infrastructure.html#attr">Attr</a></code> node is set on an <a href="infrastructure.html#html-elements" title="HTML elements">HTML element</a> using <code title="">Element.setAttributeNode()</code>, it must have its name
<a href="infrastructure.html#converted-to-ascii-lowercase">converted to ASCII lowercase</a> before the element is
affected.</p>
</div>
<p class="note">This doesn't apply to <code title="">Element.setAttributeNS()</code> and <code title="">Element.setAttributeNodeNS()</code>.</p>
</dd>
<dt><code title="dom-Element-getAttribute">Element.getAttribute()</code></dt>
<dt><code title="dom-Element-getAttributeNode">Element.getAttributeNode()</code></dt>
<dd>
<p>Attribute names are <a href="infrastructure.html#converted-to-ascii-lowercase">converted to ASCII lowercase</a>.</p>
<div class="impl">
<p>Specifically: When the <code title="">Element.getAttribute()</code> method or the <code title="">Element.getAttributeNode()</code> method is invoked on
an <a href="infrastructure.html#html-elements" title="HTML elements">HTML element</a>, the name
argument must be <a href="infrastructure.html#converted-to-ascii-lowercase">converted to ASCII lowercase</a> before the
element's attributes are examined.</p>
</div>
<p class="note">This doesn't apply to <code title="">Element.getAttributeNS()</code> and <code title="">Element.getAttributeNodeNS()</code>.</p>
</dd>
<dt><code title="dom-Document-getElementsByTagName">Document.getElementsByTagName()</code></dt>
<dt><code title="dom-Element-getElementsByTagName">Element.getElementsByTagName()</code></dt>
<dd>
<p>HTML elements match by lower-casing the argument before
comparison, elements from other namespaces are treated as in XML
(case-sensitively).</p>
<div class="impl">
<p>Specifically, these methods (but not their namespaced
counterparts) must compare the given argument in a
<a href="infrastructure.html#case-sensitive">case-sensitive</a> manner, but when looking at <a href="infrastructure.html#html-elements" title="HTML elements">HTML elements</a>, the argument must
first be <a href="infrastructure.html#converted-to-ascii-lowercase">converted to ASCII lowercase</a>.</p>
</div>
<p class="note">Thus, in an <a href="dom.html#html-documents" title="HTML documents">HTML
document</a> with nodes in multiple namespaces, these methods
will effectively be both case-sensitive and case-insensitive at
the same time.</p>
</dd>
</dl><div class="impl">
<h3 id="interactions-with-xpath-and-xslt"><span class="secno">3.4 </span>Interactions with XPath and XSLT</h3>
<p id="xpath-1.0-processors">Implementations of XPath 1.0 that
operate on <a href="dom.html#html-documents">HTML documents</a> parsed or created in the
manners described in this specification (e.g. as part of the <code title="">document.evaluate()</code> API) must act as if the
following edit was applied to the XPath 1.0 specification.</p>
<p>First, remove this paragraph:</p>
<blockquote cite="http://www.w3.org/TR/1999/REC-xpath-19991116#node-tests">
<p>A <a href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> in the
node test is expanded into an <a href="http://www.w3.org/TR/1999/REC-xpath-19991116#dt-expanded-name">expanded-name</a>
using the namespace declarations from the expression context. This
is the same way expansion is done for element type names in start
and end-tags except that the default namespace declared with <code title="">xmlns</code> is not used: if the <a href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> does
not have a prefix, then the namespace URI is null (this is the same
way attribute names are expanded). It is an error if the <a href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> has a
prefix for which there is no namespace declaration in the
expression context.</p>
</blockquote>
<p>Then, insert in its place the following:</p>
<blockquote cite="http://www.w3.org/Bugs/Public/show_bug.cgi?id=7059#c37">
<p>A QName in the node test is expanded into an expanded-name using
the namespace declarations from the expression context. If the
QName has a prefix, then there must be a namespace
declaration for this prefix in the expression context, and the
corresponding namespace
URI is the one that is associated with this prefix. It is an error
if the QName has a prefix for which there is no namespace
declaration in the expression context. </p>
<p>If the QName has no prefix and the principal node type of the
axis is element, then the default element namespace is
used. Otherwise if the QName has no prefix, the namespace URI is
null. The default element namespace is a member of the context for
the XPath expression. The value of the default element namespace
when executing an XPath expression through the DOM3 XPath API is
determined in the following way:</p>
<ol><li>If the context node is from an HTML DOM, the default element
namespace is "http://www.w3.org/1999/xhtml".</li>
<li>Otherwise, the default element namespace URI is null.</li>
</ol><p class="note">This is equivalent to adding the default element
namespace feature of XPath 2.0 to XPath 1.0, and using the HTML
namespace as the default element namespace for HTML documents. It
is motivated by the desire to have implementations be compatible
with legacy HTML content while still supporting the changes that
this specification introduces to HTML regarding the namespace used
for HTML elements, and by the desire to use XPath 1.0 rather than
XPath 2.0.</p>
</blockquote>
<p class="note">This change is a <a href="introduction.html#willful-violation">willful violation</a> of
the XPath 1.0 specification, motivated by desire to have
implementations be compatible with legacy content while still
supporting the changes that this specification introduces to HTML
regarding which namespace is used for HTML elements. <a href="references.html#refsXPATH10">[XPATH10]</a></p>
<hr><p id="dom-based-xslt-1.0-processors">XSLT 1.0 processors outputting
to a DOM when the output method is "html" (either explicitly or via
the defaulting rule in XSLT 1.0) are affected as follows:</p>
<p>If the transformation program outputs an element in no namespace,
the processor must, prior to constructing the corresponding DOM
element node, change the namespace of the element to the <a href="namespaces.html#html-namespace-0">HTML
namespace</a>, <a href="infrastructure.html#converted-to-ascii-lowercase" title="converted to ASCII
lowercase">ASCII-lowercase</a> the element's local name, and
<a href="infrastructure.html#converted-to-ascii-lowercase" title="converted to ASCII lowercase">ASCII-lowercase</a>
the names of any non-namespaced attributes on the element.</p>
<p class="note">This requirement is a <a href="introduction.html#willful-violation">willful violation</a>
of the XSLT 1.0 specification, required because this specification
changes the namespaces and case-sensitivity rules of HTML in a
manner that would otherwise be incompatible with DOM-based XSLT
transformations. (Processors that serialize the output are
unaffected.) <a href="references.html#refsXSLT10">[XSLT10]</a></p>
<p class="note">There are also additional comments regarding the
interaction of XSLT and HTML <a href="scripting-1.html#scriptTagXSLT">in the
<code>script</code> element section</a>.</p>
</div><h3 id="dynamic-markup-insertion"><span class="secno">3.5 </span><dfn>Dynamic markup insertion</dfn></h3><p class="note">APIs for dynamically inserting markup into the
document interact with the parser, and thus their behavior varies
depending on whether they are used with <a href="dom.html#html-documents">HTML documents</a>
(and the <a href="parsing.html#html-parser">HTML parser</a>) or XHTML in <a href="dom.html#xml-documents">XML
documents</a> (and the <a href="the-xhtml-syntax.html#xml-parser">XML parser</a>).</p><h4 id="opening-the-input-stream"><span class="secno">3.5.1 </span>Opening the input stream</h4><p>The <dfn id="dom-document-open" title="dom-document-open"><code>open()</code></dfn>
method comes in several variants with different numbers of
arguments.</p><dl class="domintro"><dt><var title="">document</var> = <var title="">document</var> . <code title="dom-document-open"><a href="#dom-document-open">open</a></code>( [ <var title="">type</var> [, <var title="">replace</var> ] ] )</dt>
<dd>
<p>Causes the <code><a href="infrastructure.html#document">Document</a></code> to be replaced in-place, as if
it was a new <code><a href="infrastructure.html#document">Document</a></code> object, but reusing the
previous object, which is then returned.</p>
<p>If the <var title="">type</var> argument is omitted or has the
value "<code><a href="iana.html#text-html">text/html</a></code>", then the resulting
<code><a href="infrastructure.html#document">Document</a></code> has an HTML parser associated with it, which
can be given data to parse using <code title="dom-document-write"><a href="#dom-document-write">document.write()</a></code>. Otherwise, all
content passed to <code title="dom-document-write"><a href="#dom-document-write">document.write()</a></code> will be parsed
as plain text.</p>
<p>If the <var title="">replace</var> argument is present and has
the value "<code title="">replace</code>", the existing entries in
the session history for the <code><a href="infrastructure.html#document">Document</a></code> object are
removed.</p>
<p>The method has no effect if the <code><a href="infrastructure.html#document">Document</a></code> is still
being parsed.</p>
<p>Throws an <code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> exception if the
<code><a href="infrastructure.html#document">Document</a></code> is an <a href="dom.html#xml-documents" title="XML documents">XML
document</a>.</p>
</dd>
<dt><var title="">window</var> = <var title="">document</var> . <code title="dom-document-open"><a href="#dom-document-open">open</a></code>( <var title="">url</var>, <var title="">name</var>, <var title="">features</var> [, <var title="">replace</var> ] )</dt>
<dd>
<p>Works like the <code title="dom-open"><a href="browsers.html#dom-open">window.open()</a></code>
method.</p>
</dd>
</dl><div class="impl">
<p>When called with two or fewer arguments, the method must act as
follows:</p>
<ol><li>If the <code><a href="infrastructure.html#document">Document</a></code> object is not flagged as an <a href="dom.html#html-documents" title="HTML documents">HTML document</a>, throw an
<code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> exception and abort these
steps.</li>
<li><p>Let <var title="">type</var> be the value of the first
argument, if there is one, or "<code><a href="iana.html#text-html">text/html</a></code>"
otherwise.</p></li>
<li><p>Let <var title="">replace</var> be true if there is a second
argument and it is an <a href="infrastructure.html#ascii-case-insensitive">ASCII case-insensitive</a> match for
the value "replace", and false otherwise.</p></li>
<li>
<p>If the document has an <a href="dom.html#active-parser">active parser</a> that isn't a
<a href="#script-created-parser">script-created parser</a>, and the <a href="parsing.html#insertion-point">insertion
point</a> associated with that parser's <a href="parsing.html#the-input-stream">input
stream</a> is not undefined (that is, it <em>does</em> point to
somewhere in the input stream), then the method does
nothing. Abort these steps and return the <code><a href="infrastructure.html#document">Document</a></code>
object on which the method was invoked.</p>
<p class="note">This basically causes <code title="dom-document-open"><a href="#dom-document-open">document.open()</a></code> to be ignored
when it's called in an inline script found during the parsing of
data sent over the network, while still letting it have an effect
when called asynchronously or on a document that is itself being
spoon-fed using these APIs.</p>
</li>
<li><p>Release the <a href="webappapis.html#storage-mutex">storage mutex</a>.</p></li>
<li><p><a href="history.html#prompt-to-unload-a-document" title="prompt to unload a document">Prompt to
unload</a> the <code><a href="infrastructure.html#document">Document</a></code> object. If the user
<a href="history.html#refused-to-allow-the-document-to-be-unloaded">refused to allow the document to be unloaded</a>, then
these steps must be aborted.</p></li>
<li><p><a href="history.html#unload-a-document" title="unload a document">Unload</a> the
<code><a href="infrastructure.html#document">Document</a></code> object, with the <var title="">recycle</var>
parameter set to true.</p></li>
<li><p><a href="history.html#abort-a-document" title="abort a document">Abort</a> the
<code><a href="infrastructure.html#document">Document</a></code>.</p></li>
<li><p>Unregister all event listeners registered on the
<code><a href="infrastructure.html#document">Document</a></code> node and its descendants.</p>
</li><li><p>Remove any <a href="webappapis.html#concept-task" title="concept-task">tasks</a>
associated with the <code><a href="infrastructure.html#document">Document</a></code> in any <a href="webappapis.html#task-source">task
source</a>.</p></li>
<li><p>Remove all child nodes of the document, without firing any
mutation events.</p></li>
<li><p>Replace the <code><a href="infrastructure.html#document">Document</a></code>'s singleton objects with
new instances of those objects. (This includes in particular the
<code><a href="browsers.html#window">Window</a></code>, <code><a href="history.html#location">Location</a></code>, <code><a href="history.html#history-0">History</a></code>,
<code><a href="offline.html#applicationcache">ApplicationCache</a></code>,
and <code><a href="timers.html#navigator">Navigator</a></code>, objects, the various
<code><a href="browsers.html#barprop">BarProp</a></code> objects, the two <code>Storage</code> objects,
the various <code><a href="common-dom-interfaces.html#htmlcollection">HTMLCollection</a></code> objects, and objects
defined by other specifications, like <code>Selection</code>. It
also includes all the Web IDL prototypes in the JavaScript binding,
including the <code><a href="infrastructure.html#document">Document</a></code> object's prototype.)</p></li>
<li><p>Change the <a href="dom.html#document-s-character-encoding">document's character encoding</a> to
UTF-8.</p></li>
<li><p>Set the <code><a href="infrastructure.html#document">Document</a></code> object's <a href="dom.html#reload-override-flag">reload override
flag</a> and set the <code><a href="infrastructure.html#document">Document</a></code>'s <a href="dom.html#reload-override-buffer">reload
override buffer</a> to the empty string.</p></li>
<li><p>Change <a href="dom.html#the-document-s-address">the document's address</a> to the
<a href="browsers.html#entry-script">entry script</a>'s <a href="webappapis.html#script-s-document" title="script's
document">document</a>'s <a href="dom.html#the-document-s-address" title="the document's
address">address</a>.</p></li>
<li><p>Create a new <a href="parsing.html#html-parser">HTML parser</a> and associate it with
the document. This is a <dfn id="script-created-parser">script-created parser</dfn> (meaning
that it can be closed by the <code title="dom-document-open"><a href="#dom-document-open">document.open()</a></code> and <code title="dom-document-close"><a href="#dom-document-close">document.close()</a></code> methods, and
that the tokenizer will wait for an explicit call to <code title="dom-document-close"><a href="#dom-document-close">document.close()</a></code> before emitting
an end-of-file token). The encoding <a href="parsing.html#concept-encoding-confidence" title="concept-encoding-confidence">confidence</a> is
<i>irrelevant</i>.</p></li>
<li><p>Set the <a href="dom.html#current-document-readiness">current document readiness</a> of the
document to "loading".</p></li>
<li>
<p>If the <var title="">type</var> string contains a U+003B
SEMICOLON character (;), remove the first such character and all
characters from it up to the end of the string.</p>
<p>Strip all leading and trailing <a href="common-microsyntaxes.html#space-character" title="space
character">space characters</a> from <var title="">type</var>.</p>
<p>If <var title="">type</var> is <em>not</em> now an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string
"<code><a href="iana.html#text-html">text/html</a></code>", then act as if the tokenizer had emitted
a start tag token with the tag name "pre" followed by a single
U+000A LINE FEED (LF) character, then
switch the <a href="parsing.html#html-parser">HTML parser</a>'s tokenizer to the
<a href="tokenization.html#plaintext-state">PLAINTEXT state</a>.</p>
</li>
<li>
<p>Remove all the entries in the <a href="browsers.html#browsing-context">browsing context</a>'s
<a href="history.html#session-history">session history</a> after the <a href="history.html#current-entry">current
entry</a>. If the <a href="history.html#current-entry">current entry</a> is the last entry
in the session history, then no entries are removed.</p>
<p class="note">This <a href="history.html#history-notes">doesn't necessarily
have to affect</a> the user agent's user interface.</p>
</li>
<li><p>Remove any <a href="webappapis.html#concept-task" title="concept-task">tasks</a> queued by
the <a href="webappapis.html#history-traversal-task-source">history traversal task source</a>.</p></li>
<li>Remove any earlier entries that share the same
<code><a href="infrastructure.html#document">Document</a></code>.</li>
<li><p>If <var title="">replace</var> is false, then add a new
entry, just before the last entry, and associate with the new entry
the text that was parsed by the previous parser associated with the
<code><a href="infrastructure.html#document">Document</a></code> object, as well as the state of the document
at the start of these steps. This allows the user to step backwards
in the session history to see the page before it was blown away by
the <code title="dom-document-open"><a href="#dom-document-open">document.open()</a></code> call.
This new entry does not have a <code><a href="infrastructure.html#document">Document</a></code> object, so a
new one will be created if the session history is traversed to that
entry.</p></li>
<li><p>Finally, set the <a href="parsing.html#insertion-point">insertion point</a> to point at
just before the end of the <a href="parsing.html#the-input-stream">input stream</a> (which at this
point will be empty).</p></li>
<li><p>Return the <code><a href="infrastructure.html#document">Document</a></code> on which the method was
invoked.</p></li>
</ol><p>When called with three or more arguments, the <code title="dom-document-open"><a href="#dom-document-open">open()</a></code> method on the
<code><a href="dom.html#htmldocument">HTMLDocument</a></code> object must call the <code title="dom-open"><a href="browsers.html#dom-open">open()</a></code> method on the <code><a href="browsers.html#window">Window</a></code>
object of the <code><a href="dom.html#htmldocument">HTMLDocument</a></code> object, with the same
arguments as the original call to the <code title="dom-document-open"><a href="#dom-document-open">open()</a></code> method, and return whatever
that method returned. If the <code><a href="dom.html#htmldocument">HTMLDocument</a></code> object has no
<code><a href="browsers.html#window">Window</a></code> object, then the method must raise an
<code><a href="common-dom-interfaces.html#invalid_access_err">INVALID_ACCESS_ERR</a></code> exception.</p>
</div><h4 id="closing-the-input-stream"><span class="secno">3.5.2 </span>Closing the input stream</h4><dl class="domintro"><dt><var title="">document</var> . <code title="dom-document-close"><a href="#dom-document-close">close</a></code>()</dt>
<dd>
<p>Closes the input stream that was opened by the <code title="dom-document-open"><a href="#dom-document-open">document.open()</a></code> method.</p>
<p>Throws an <code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> exception if the
<code><a href="infrastructure.html#document">Document</a></code> is an <a href="dom.html#xml-documents" title="XML documents">XML
document</a>.</p>
</dd>
</dl><div class="impl">
<p>The <dfn id="dom-document-close" title="dom-document-close"><code>close()</code></dfn>
method must run the following steps:</p>
<ol><li><p>If the <code><a href="infrastructure.html#document">Document</a></code> object is not flagged as an
<a href="dom.html#html-documents" title="HTML documents">HTML document</a>, throw an
<code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> exception and abort these
steps.</p></li>
<li><p>If there is no <a href="#script-created-parser">script-created parser</a> associated
with the document, then abort these steps.</p></li>
<li><p>Insert an <a href="parsing.html#explicit-eof-character">explicit "EOF" character</a> at the end
of the parser's <a href="parsing.html#the-input-stream">input stream</a>.</p></li>
<li><p>If there is a <a href="scripting-1.html#pending-parsing-blocking-script">pending parsing-blocking script</a>,
then abort these steps.</p></li>
<li><p>Run the tokenizer, processing resulting tokens as they are
emitted, and stopping when the tokenizer reaches the <a href="parsing.html#explicit-eof-character">explicit
"EOF" character</a> or <a href="webappapis.html#spin-the-event-loop" title="spin the event loop">spins
the event loop</a>.</p></li>
</ol></div><h4 id="document.write"><span class="secno">3.5.3 </span><code title="dom-document-write"><a href="#dom-document-write">document.write()</a></code></h4><dl class="domintro"><dt><var title="">document</var> . <code title="dom-document-write"><a href="#dom-document-write">write</a></code>(<var title="">text</var>...)</dt>
<dd>
<p>In general, adds the given string(s) to the
<code><a href="infrastructure.html#document">Document</a></code>'s input stream.</p>
<p class="warning">This method has very idiosyncratic behavior. In
some cases, this method can affect the state of the <a href="parsing.html#html-parser">HTML
parser</a> while the parser is running, resulting in a DOM that
does not correspond to the source of the document. In other cases,
the call can clear the current page first, as if <code title="dom-document-open"><a href="#dom-document-open">document.open()</a></code> had been called.
In yet more cases, the method is simply ignored, or throws an
exception. To make matters worse, the exact behavior of this
method can in some cases be dependent on network latency, which
can lead to failures that are very hard to debug. <strong>For all
these reasons, use of this method is strongly
discouraged.</strong></p>
<p>This method throws an <code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> exception
when invoked on <a href="dom.html#xml-documents">XML documents</a>.</p>
</dd>
</dl><div class="impl">
<p><code><a href="infrastructure.html#document">Document</a></code> objects have an
<dfn id="ignore-destructive-writes-counter">ignore-destructive-writes counter</dfn>, which is used in
conjunction with the processing of <code><a href="scripting-1.html#the-script-element">script</a></code> elements to
prevent external scripts from being able to use <code title="dom-document-write"><a href="#dom-document-write">document.write()</a></code> to blow away the
document by implicitly calling <code title="dom-document-open"><a href="#dom-document-open">document.open()</a></code>. Initially, the
counter must be set to zero.</p>
<p>The <dfn id="dom-document-write" title="dom-document-write"><code>document.write(...)</code></dfn>
method must act as follows:</p>
<ol><li>
<p>If the method was invoked on an <a href="dom.html#xml-documents" title="XML documents">XML
document</a>, throw an <code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code>
exception and abort these steps.</p>
</li>
<li>
<p>If the <a href="parsing.html#insertion-point">insertion point</a> is undefined and the
<code><a href="infrastructure.html#document">Document</a></code>'s <a href="#ignore-destructive-writes-counter">ignore-destructive-writes
counter</a> is greater than zero, then abort these steps.</p>
</li>
<li>
<p>If the <a href="parsing.html#insertion-point">insertion point</a> is undefined, call the
<code title="dom-document-open"><a href="#dom-document-open">open()</a></code> method on the <code title="Document"><a href="infrastructure.html#document">document</a></code> object (with no arguments). If
the user <a href="history.html#refused-to-allow-the-document-to-be-unloaded">refused to allow the document to be
unloaded</a>, then abort these steps. Otherwise, the
<a href="parsing.html#insertion-point">insertion point</a> will point at just before the end of
the (empty) <a href="parsing.html#the-input-stream">input stream</a>.</p>
</li>
<li>
<p>Insert the string consisting of the concatenation of all the
arguments to the method into the <a href="parsing.html#the-input-stream">input stream</a> just
before the <a href="parsing.html#insertion-point">insertion point</a>.</p>
</li>
<li>
<p>If the <code><a href="infrastructure.html#document">Document</a></code> object's <a href="dom.html#reload-override-flag">reload override
flag</a> is set, then append the string consisting of the
concatenation of all the arguments to the method to the
<code><a href="infrastructure.html#document">Document</a></code>'s <a href="dom.html#reload-override-buffer">reload override buffer</a>.</p>
</li>
<li>
<p>If there is no <a href="scripting-1.html#pending-parsing-blocking-script">pending parsing-blocking script</a>,
have the tokenizer process the characters that were inserted, one
at a time, processing resulting tokens as they are emitted, and
stopping when the tokenizer reaches the insertion point or when
the processing of the tokenizer is aborted by the tree
construction stage (this can happen if a <code><a href="scripting-1.html#the-script-element">script</a></code> end
tag token is emitted by the tokenizer).
</p><p class="note">If the <code title="dom-document-write"><a href="#dom-document-write">document.write()</a></code> method was
called from script executing inline (i.e. executing because the
parser parsed a set of <code><a href="scripting-1.html#the-script-element">script</a></code> tags), then this is a
<a href="parsing.html#nestedParsing">reentrant invocation of the
parser</a>.</p>
</li>
<li>
<p>Finally, return from the method.</p>
</li>
</ol></div><h4 id="document.writeln"><span class="secno">3.5.4 </span><code title="dom-document-writeln"><a href="#dom-document-writeln">document.writeln()</a></code></h4><dl class="domintro"><dt><var title="">document</var> . <code title="dom-document-writeln"><a href="#dom-document-writeln">writeln</a></code>(<var title="">text</var>...)</dt>
<dd>
<p>Adds the given string(s) to the <code><a href="infrastructure.html#document">Document</a></code>'s input
stream, followed by a newline character. If necessary, calls the
<code title="dom-document-open"><a href="#dom-document-open">open()</a></code> method implicitly
first.</p>
<p>This method throws an <code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> exception
when invoked on <a href="dom.html#xml-documents">XML documents</a>.</p>
</dd>
</dl><div class="impl">
<p>The <dfn id="dom-document-writeln" title="dom-document-writeln"><code>document.writeln(...)</code></dfn>
method, when invoked, must act as if the <code title="dom-document-write"><a href="#dom-document-write">document.write()</a></code> method had been
invoked with the same argument(s), plus an extra argument consisting
of a string containing a single line feed character (U+000A).</p>
</div><h4 id="innerhtml"><span class="secno">3.5.5 </span><code title="dom-innerHTML"><a href="#dom-innerhtml">innerHTML</a></code></h4><p>The <dfn id="dom-innerhtml" title="dom-innerHTML"><code>innerHTML</code></dfn> IDL
attribute represents the markup of the node's contents.</p><dl class="domintro"><dt><var title="">document</var> . <code title="dom-innerHTML"><a href="#dom-innerhtml">innerHTML</a></code> [ = <var title="">value</var> ]</dt>
<dd>
<p>Returns a fragment of HTML or XML that represents the
<code><a href="infrastructure.html#document">Document</a></code>.</p>
<p>Can be set, to replace the <code><a href="infrastructure.html#document">Document</a></code>'s contents
with the result of parsing the given string.</p>
<p>In the case of <a href="dom.html#xml-documents">XML documents</a>, will throw an
<code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> if the <code><a href="infrastructure.html#document">Document</a></code> cannot
be serialized to XML, and a <code><a href="common-dom-interfaces.html#syntax_err">SYNTAX_ERR</a></code> if the given
string is not well-formed.</p>
</dd>
<dt><var title="">element</var> . <code title="dom-innerHTML"><a href="#dom-innerhtml">innerHTML</a></code> [ = <var title="">value</var> ]</dt>
<dd>
<p>Returns a fragment of HTML or XML that represents the element's
contents.</p>
<p>Can be set, to replace the contents of the element with nodes
parsed from the given string.</p>
<p>In the case of <a href="dom.html#xml-documents">XML documents</a>, will throw an
<code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> if the element cannot be serialized
to XML, and a <code><a href="common-dom-interfaces.html#syntax_err">SYNTAX_ERR</a></code> if the given string is not
well-formed.</p>
</dd>
</dl><div class="impl">
<p>On getting, if the node's document is an <a href="dom.html#html-documents" title="HTML
documents">HTML document</a>, then the attribute must return the
result of running the <a href="the-end.html#html-fragment-serialization-algorithm">HTML fragment serialization
algorithm</a> on the node; otherwise, the node's document is an
<a href="dom.html#xml-documents" title="XML documents">XML document</a>, and the attribute
must return the result of running the <a href="the-xhtml-syntax.html#xml-fragment-serialization-algorithm">XML fragment
serialization algorithm</a> on the node instead (this might raise
an exception instead of returning a string).</p>
<p>On setting, the following steps must be run:</p>
<ol><li>
<p>If the node's document is an <a href="dom.html#html-documents" title="HTML documents">HTML
document</a>: Invoke the <a href="the-end.html#html-fragment-parsing-algorithm">HTML fragment parsing
algorithm</a>.</p>
<p>If the node's document is an <a href="dom.html#xml-documents" title="XML documents">XML
document</a>: Invoke the <a href="the-xhtml-syntax.html#xml-fragment-parsing-algorithm">XML fragment parsing
algorithm</a>.</p>
<p>In either case, the algorithm must be invoked with the string
being assigned into the <code title="dom-innerHTML"><a href="#dom-innerhtml">innerHTML</a></code> attribute as the <var title="">input</var>. If the node is an <code><a href="infrastructure.html#element">Element</a></code>
node, then, in addition, that element must be passed as the <var title="concept-frag-parse-context"><a href="the-end.html#concept-frag-parse-context">context</a></var> element.</p>
<p>If this raises an exception, then abort these steps.</p>
<p>Otherwise, let <var title="">new children</var> be the nodes
returned.</p>
</li>
<li>
<p>If the attribute is being set on a <code><a href="infrastructure.html#document">Document</a></code> node,
and that document has an <a href="dom.html#active-parser">active parser</a>, then abort
that parser.</p>
</li>
<li>
<p>Remove the child nodes of the node whose <code title="dom-innerHTML"><a href="#dom-innerhtml">innerHTML</a></code> attribute is being set,
firing appropriate mutation events.</p>
</li>
<li>
<p>If the attribute is being set on a <code><a href="infrastructure.html#document">Document</a></code> node,
let <var title="">target document</var> be that
<code><a href="infrastructure.html#document">Document</a></code> node. Otherwise, the attribute is being set
on an <code><a href="infrastructure.html#element">Element</a></code> node; let <var title="">target
document</var> be the <code title="dom-Node-ownerDocument"><a href="infrastructure.html#dom-node-ownerdocument">ownerDocument</a></code> of that
<code><a href="infrastructure.html#element">Element</a></code>.</p>
</li>
<li>
<p>Set the <code title="dom-Node-ownerDocument"><a href="infrastructure.html#dom-node-ownerdocument">ownerDocument</a></code> of all the
nodes in <var title="">new children</var> to the <var title="">target document</var>.</p>
</li>
<li>
<p>Append all the <var title="">new children</var> nodes to the
node whose <code title="dom-innerHTML"><a href="#dom-innerhtml">innerHTML</a></code> attribute
is being set, preserving their order, and firing mutation events
as if a <code><a href="infrastructure.html#documentfragment">DocumentFragment</a></code> containing the <var title="">new children</var> had been inserted.</p>
</li>
</ol></div><h4 id="outerhtml"><span class="secno">3.5.6 </span><code title="dom-outerHTML"><a href="#dom-outerhtml">outerHTML</a></code></h4><p>The <dfn id="dom-outerhtml" title="dom-outerHTML"><code>outerHTML</code></dfn> IDL
attribute represents the markup of the element and its contents.</p><dl class="domintro"><dt><var title="">element</var> . <code title="dom-outerHTML"><a href="#dom-outerhtml">outerHTML</a></code> [ = <var title="">value</var> ]</dt>
<dd>
<p>Returns a fragment of HTML or XML that represents the element
and its contents.</p>
<p>Can be set, to replace the element with nodes parsed from the
given string.</p>
<p>In the case of <a href="dom.html#xml-documents">XML documents</a>, will throw an
<code><a href="common-dom-interfaces.html#invalid_state_err">INVALID_STATE_ERR</a></code> if the element cannot be serialized
to XML, and a <code><a href="common-dom-interfaces.html#syntax_err">SYNTAX_ERR</a></code> if the given string is not
well-formed.</p>
<p>Throws a <code><a href="common-dom-interfaces.html#no_modification_allowed_err">NO_MODIFICATION_ALLOWED_ERR</a></code> exception if
the parent of the element is the <code><a href="infrastructure.html#document">Document</a></code>
node.</p>
</dd>
</dl><div class="impl">
<p>On getting, if the node's document is an <a href="dom.html#html-documents" title="HTML
documents">HTML document</a>, then the attribute must return the
result of running the <a href="the-end.html#html-fragment-serialization-algorithm">HTML fragment serialization
algorithm</a> on a fictional node whose only child is the node on
which the attribute was invoked; otherwise, the node's document is
an <a href="dom.html#xml-documents" title="XML documents">XML document</a>, and the
attribute must return the result of running the <a href="the-xhtml-syntax.html#xml-fragment-serialization-algorithm">XML fragment
serialization algorithm</a> on that fictional node instead (this
might raise an exception instead of returning a string).</p>
<p>On setting, the following steps must be run:</p>
<ol><li>
<p>Let <var title="">target</var> be the element whose <code title="dom-outerHTML"><a href="#dom-outerhtml">outerHTML</a></code> attribute is being
set.</p>
</li>
<li>
<p>If <var title="">target</var> has no parent node, then abort
these steps. There would be no way to obtain a reference to the
nodes created even if the remaining steps were run.</p>
</li>
<li>
<p>If <var title="">target</var>'s parent node is a
<code><a href="infrastructure.html#document">Document</a></code> object, throw a
<code><a href="common-dom-interfaces.html#no_modification_allowed_err">NO_MODIFICATION_ALLOWED_ERR</a></code> exception and abort these
steps.</p>
</li>
<li>
<p>Let <var title="">parent</var> be <var title="">target</var>'s
parent node, unless that is a <code><a href="infrastructure.html#documentfragment">DocumentFragment</a></code> node,
in which case let <var title="">parent</var> be an arbitrary
<code><a href="sections.html#the-body-element">body</a></code> element.</p>
</li>
<li>
<p>If <var title="">target</var>'s document is an <a href="dom.html#html-documents" title="HTML documents">HTML document</a>: Invoke the <a href="the-end.html#html-fragment-parsing-algorithm">HTML
fragment parsing algorithm</a>.</p>
<p>If <var title="">target</var>'s document is an <a href="dom.html#xml-documents" title="XML
documents">XML document</a>: Invoke the <a href="the-xhtml-syntax.html#xml-fragment-parsing-algorithm">XML fragment
parsing algorithm</a>.</p>
<p>In either case, the algorithm must be invoked with the string
being assigned into the <code title="dom-outerHTML"><a href="#dom-outerhtml">outerHTML</a></code> attribute as the <var title="">input</var>, and <var title="">parent</var> as the <var title="concept-frag-parse-context"><a href="the-end.html#concept-frag-parse-context">context</a></var> element.</p>
<p>If this raises an exception, then abort these steps.</p>
<p>Otherwise, let <var title="">new children</var> be the nodes
returned.</p>
</li>
<li>
<p>Set the <code title="dom-Node-ownerDocument"><a href="infrastructure.html#dom-node-ownerdocument">ownerDocument</a></code> of all the
nodes in <var title="">new children</var> to <var title="">target</var>'s document.</p>
</li>
<li>
<p>Remove <var title="">target</var> from its parent node, firing
mutation events as appropriate, and then insert in its place all
the <var title="">new children</var> nodes, preserving their
order, and again firing mutation events as if a
<code><a href="infrastructure.html#documentfragment">DocumentFragment</a></code> containing the <var title="">new
children</var> had been inserted.</p>
</li>
</ol></div><h4 id="insertadjacenthtml"><span class="secno">3.5.7 </span><code title="dom-insertAdjacentHTML"><a href="#dom-insertadjacenthtml">insertAdjacentHTML()</a></code></h4><dl class="domintro"><dt><var title="">element</var> . <code title="dom-insertAdjacentHTML"><a href="#dom-insertadjacenthtml">insertAdjacentHTML</a></code>(<var title="">position</var>, <var title="">text</var>)</dt>
<dd>
<p>Parses the given string <var title="">text</var> as HTML or XML
and inserts the resulting nodes into the tree in the position
given by the <var title="">position</var> argument, as
follows:</p>
<dl><dt>"beforebegin"</dt>
<dd>Before the element itself.</dd>
<dt>"afterbegin"</dt>
<dd>Just inside the element, before its first child.</dd>
<dt>"beforeend"</dt>
<dd>Just inside the element, after its last child.</dd>
<dt>"afterend"</dt>
<dd>After the element itself.</dd>
</dl><p>Throws a <code><a href="common-dom-interfaces.html#syntax_err">SYNTAX_ERR</a></code> exception if the arguments
have invalid values (e.g., in the case of <a href="dom.html#xml-documents">XML
documents</a>, if the given string is not well-formed).</p>
<p>Throws a <code><a href="common-dom-interfaces.html#no_modification_allowed_err">NO_MODIFICATION_ALLOWED_ERR</a></code> exception if
the given position isn't possible (e.g. inserting elements after
the root element of a <code><a href="infrastructure.html#document">Document</a></code>).</p>
</dd>
</dl><div class="impl">
<p>The <dfn id="dom-insertadjacenthtml" title="dom-insertAdjacentHTML"><code>insertAdjacentHTML(<var title="">position</var>, <var title="">text</var>)</code></dfn>
method, when invoked, must run the following algorithm:</p>
<ol><li>
<p>Let <var title="">position</var> and <var title="">text</var>
be the method's first and second arguments, respectively.</p>
</li>
<li>
<p>Let <var title="">target</var> be the element on which the
method was invoked.</p>
</li>
<li>
<p>Use the first matching item from this list:</p>
<dl><dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "beforebegin"</dt>
<dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "afterend"</dt>
<dd>
<p>If <var title="">target</var> has no parent node, then abort
these steps.</p>
<p>If <var title="">target</var>'s parent node is a
<code><a href="infrastructure.html#document">Document</a></code> object, then throw a
<code><a href="common-dom-interfaces.html#no_modification_allowed_err">NO_MODIFICATION_ALLOWED_ERR</a></code> exception and abort
these steps.
</p><p>Otherwise, let <var title="">destination</var> be the parent node
of <var title="">target</var>.</p>
</dd>
<dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "afterbegin"</dt>
<dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "beforeend"</dt>
<dd>
<p>Let <var title="">destination</var> be the same as <var title="">target</var>.</p>
</dd>
<dt>Otherwise</dt>
<dd>
<p>Throw a <code><a href="common-dom-interfaces.html#syntax_err">SYNTAX_ERR</a></code> exception.</p>
</dd>
</dl></li>
<li>
<p>If <var title="">target</var>'s document is an <a href="dom.html#html-documents" title="HTML documents">HTML document</a>: Invoke the <a href="the-end.html#html-fragment-parsing-algorithm">HTML
fragment parsing algorithm</a>.</p>
<p>If <var title="">target</var>'s document is an <a href="dom.html#xml-documents" title="XML
documents">XML document</a>: Invoke the <a href="the-xhtml-syntax.html#xml-fragment-parsing-algorithm">XML fragment
parsing algorithm</a>.</p>
<p>In either case, the algorithm must be invoked with <var title="">text</var> as the <var title="">input</var>, and <var title="">destination</var> as the <var title="concept-frag-parse-context"><a href="the-end.html#concept-frag-parse-context">context</a></var> element.</p>
<p>If this raises an exception, then abort these steps.</p>
<p>Otherwise, let <var title="">new children</var> be the nodes
returned.</p>
</li>
<li>
<p>Set the <code title="dom-Node-ownerDocument"><a href="infrastructure.html#dom-node-ownerdocument">ownerDocument</a></code> of all the
nodes in <var title="">new children</var> to <var title="">target</var>'s document.</p>
</li>
<li>
<p>Use the first matching item from this list:</p>
<dl><dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "beforebegin"</dt>
<dd>
<p>Insert all the <var title="">new children</var> nodes
immediately before <var title="">target</var>.</p>
</dd>
<dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "afterbegin"</dt>
<dd>
<p>Insert all the <var title="">new children</var> nodes before
the first child of <var title="">target</var>, if there is
one. If there is no such child, append them all to <var title="">target</var>.</p>
</dd>
<dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "beforeend"</dt>
<dd>
<p>Append all the <var title="">new children</var> nodes to <var title="">target</var>.</p>
</dd>
<dt>If <var title="">position</var> is an <a href="infrastructure.html#ascii-case-insensitive">ASCII
case-insensitive</a> match for the string "afterend"</dt>
<dd>
<p>Insert all the <var title="">new children</var> nodes
immediately after <var title="">target</var>.</p>
</dd>
</dl><p>The <var title="">new children</var> nodes must be inserted in
a manner that preserves their order and fires mutation events as
if a <code><a href="infrastructure.html#documentfragment">DocumentFragment</a></code> containing the <var title="">new children</var> had been inserted.</p>
</li>
</ol></div></body></html>