/
803.txt
1238 lines (974 loc) · 63.8 KB
/
803.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
[1] [[HTML]] の [DFN[[CODE(HTMLe)@en[[[script]]]]]] [[要素]]は、動的な[[スクリプト]]や、
[[スクリプト]]が使うデータを[[文書]]に埋め込むものです。
* 仕様書
[REFS[
- [130] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-16 01:30:20 +09:00]] 版) <https://html.spec.whatwg.org/#the-script-element>
]REFS]
* 意味
[131] [CODE(HTMLe)@en[[[script]]]] [[要素]]は、動的な[[スクリプト]]や、データブロックを[[文書]]に含めるために使うことができます。
[SRC[>>130]]
;; [134] どちらであるかは [CODE(HTMLa)@en[[[type]]]] [[属性]]や [CODE(HTMLa)@en[[[language]]]]
[[属性]]によって決まります。 [CODE(HTML)@en[[[<script type>]]]] を参照。
[132] [CODE(HTMLe)@en[[[script]]]] [[要素]]は[[利用者]]に対する[[内容]]を[[表現]]していません。 [SRC[>>130]]
[186] [CODE(HTMLe)@en[[[script]]]] [[要素]]は、次の通り分類されています。
[FIG(short list)[
- [[メタデータ内容]] [SRC[>>130]]
- [[フロー内容]] [SRC[>>130]]
- [[語句内容]] [SRC[>>130]]
- [[スクリプト支援要素]] [SRC[>>130]]
]FIG]
* 構文
[188] [[開始タグ]]も[[終了タグ]]も[[必須]]であり、省略できません [SRC[>>130]]。
[HISTORY[
[REFS[
- [68] [CITE[Bug 6357 – <script> start tag parsing]] ([TIME[2009-01-06 14:41:59 +09:00]] 版) <https://www.w3.org/Bugs/Public/show_bug.cgi?id=6357>
]REFS]
[69] [[Presto]] と [[WebKit]] は [CODE(HTMLe)@en[[[script]]]] [[開始タグ]]で[[認められている斜線]]を認識し、
[[void要素]]と同じような挙動をします。この挙動は既存の [[Widget]] ([[Opera Widget]]、[[Dashboard]])
との互換性のために必要です。
[70] [[Ian Hickson]] は、特定の非 [[Web]] 環境で必要という理由だけで [[HTML5]]
仕様を変更するつもりはないと >>68 で述べています。 (かなり前にもこの問題が取り上げられたときに同じことを言っていた気がします。)
]HISTORY]
* 文脈
[14] [CODE(HTMLe)@en[[[script]]]] [[要素]]は、
[[フロー内容]]、[[語句内容]]、[[スクリプト支援要素]]のいずれかが求められる場面で使うことができます
[SRC[>>130]]。つまり [[HTML文書]]のほとんどあらゆる場所で使うことができます。
[HISTORY[
[187] [[HTML4]] 時代も大部分で使うことが認められていました [SRC[HTML 4 18.2.1]]
が、 [[HTML5]] で更に制約が緩和され、[[構文解析器]]等の都合で困難な場面を除き、
ほとんどすべての場面で使えるようになりました。
]HISTORY]
* 属性
[9] 次の[[属性]]があります。
[FIG(short list)[
- [[大域属性]]
- [CODE(HTMLa)@en[[[async]]]]
- [CODE(HTMLa)@en[[[charset]]]]
- [CODE(HTMLa)@en[[[crossorigin]]]]
- [CODE(HTMLa)@en[[[defer]]]]
- [CODE(HTMLa)@en[[[nonce]]]]
- [CODE(HTMLa)@en[[[src]]]]
- [CODE(HTMLa)@en[[[type]]]]
]FIG]
;; [135] [CODE(HTML)@en[[[<script type>]]]] 依存の制約もあります (そちらの項を参照)。
[HISTORY[
[189] 他に次の歴史的な[[属性]]があります。
[FIG(list)[
,[CODE(HTMLa)[[[archive]]]] , , ,[NC4]
,[CODE(HTMLa)[[[classname]]]] ,[[逆ドメイン名]] , ,級名 ,[ECMA-290]
,[CODE(HTMLa)[[[event]]]] , , ,[[事象]] ,[HTML 4] 予約
,[CODE(HTMLa)[[[for]]]] ,[CODE(SGML)[[[IDREF]]]] , ,対象 ,[HTML 4] 予約
,[CODE(HTMLa)[[[language]]]] , , ,スクリプト言語 ,[HTML 4] 非推奨
,[CODE(HTMLa)@en[[[x-mojo-version]]]]
,[CODE(HTMLa)[[[name]]]] , , , ,非標準
,[CODE(HTMLa)[[[purpose]]]] , , ,実行目的 ,[ECMA-290]
,[CODE(XMLa)[[VAR[ev:]][[event]]]] ,[CODE(ABNF)[[[QName]]]] ,(なし) ,[[事象名]]
,[CODE(XMLa)[[VAR[ev:]][[observer]]]] ,[CODE(XML)[[[IDREF]]]] , ,[[事象観察器]]
,[CODE(XMLa)[[VAR[ev:]][[phase]]]] , , ,
,[CODE(XMLa)[[VAR[ev:]][[propagate]]]] , , ,[[伝播]]制御
,[CODE(XMLa)[[VAR[ev:]][[target]]]] ,[CODE(XML)[IDREF]] , ,事象対象
]FIG]
]HISTORY]
* 内容
[194] [CODE(HTMLe)@en[[[script]]]] [[要素]]の種別が[[古典スクリプト]]や[[モジュールスクリプト]]の場合は、
[CODE(HTMLa)@en[[[src]]]] [[属性]]を使って外部スクリプト資源を指定することもできますし、
[[内容]]として直接埋め込むこともできます [SRC[>>130]]。
;; [CODE(HTML)@en[[[<script src>]]]] も参照。
[137] [CODE(HTMLe)@en[[[script]]]] [[要素]]の種別が[[データブロック]]の時は、
[[内容]]として直接埋め込まなければ[['''なりません''']] [SRC[>>130]]。
;; [133] [CODE(HTMLe)@en[[[script]]]] [[要素]]の種別については [CODE(HTML)@en[[[<script type>]]]] を参照。
** 言語依存の制約
[193] [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[内容]]が[[古典スクリプト]]や[[モジュールスクリプト]]を表しているときは、
それぞれ [[JavaScript]] の [CODE[[[Script]]]] や [CODE[[[Module]]]]
の制約に従わなければ[['''なりません''']] [SRC[>>130]]。
[HISTORY[
[192] かつては次のような若干曖昧な規定でした。
[150] [[HTML Standard]] は共通の制約以外には [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[内容]]について制約を課しておらず、
[CODE(HTMLa)@en[[[type]]]] (と [CODE(HTMLa)@en[[[language]]]]) によって決定される[[言語]]の仕様による制限に適合しなければならないとしています。
[151] ただし実際にはそのような制約を明示している仕様はありません。
[152] [[HTML Standard]] によれば、 [CODE(HTMLe)@en[[[script]]]] [[要素]]で [CODE(HTMLa)@en[[[src]]]]
[[属性]]がない場合、 [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[内容]]は
- [153] [[XML]] ベースの[[言語]]であれば[[子供]]を
- [154] テキストベースの[[言語]]であれば[[子供]]の[[テキスト節点]]を
... 使うことになっています。ここから推測すると、
- [155] [[XML]] ベースの[[言語]]であれば、 [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[内容]]がその [[XML]]
[[言語]]の[[要素]]や[[テキスト]]
- [156] テキストベースの[[言語]]であればその[[言語]]によって記述された[[テキスト]]のみで、
[[要素]]は使用してはいけない
... という風に解釈するのが妥当でしょう。
[157] ただし [[HTML]] 構文では [CODE(HTMLe)@en[[[script]]]]
[[要素]]の構文解析直後の状態は常に[[テキスト節点]]を高々1つだけ含んだ状態になります。[[要素]]を[[子供]]にするためには
[[XML]] 構文を使うか[[スクリプト]]で挿入するしかありません。そのため、データブロックとして [[XML]]
ベースのデータが [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[内容]]に埋め込まれることがありますが、
[[XML]] のソースを[[テキスト節点]]として含んだ状態になってしまいます。
]HISTORY]
[139] [CODE(HTMLe)@en[[[script]]]] [[要素]]の種別が[[データブロック]]の時は、
[CODE(HTMLa)@en[[[type]]]] [[属性]]で指定された書式の要件に従わなければ[['''なりません''']] [SRC[>>130]]。
** 外部スクリプトについてのドキュメントの制約
[142] [CODE(HTMLa)@en[[[src]]]] [[属性]]が指定されている場合、 [CODE(HTMLe)@en[[[script]]]]
[[要素]]の[[内容]]は外部の[[スクリプト]]についての[[ドキュメント]]とみなされます。
[[スクリプト]]として実行はされません。この場合には、 ([[スクリプト言語]]に関わらず)
次のものだけを使わなければならないという制約が課されます (空でも構いません) [SRC[>>130]]。
[FIG[
- [145] [CODE(charname)@en[[[SPACE]]]]
- [146] [CODE(char)@en[[[U+0009]]]]
- [147] [CODE(charname)@en[[[LF]]]]
- [148] [[JavaScript]] の行内コメント [CODE[/* ... */]]
- [149] [[JavaScript]] の一行コメント [CODE[[[//]] ... [[LF]]]]
-- 末尾に[[改行]]が必要です。
]FIG]
** 共通の制約
[140] [CODE(HTMLe)@en[[[script]]]] [[要素]]の [CODE(DOMa)@en[[[textContent]]]] は次の要件を満たさなければ[['''なりません''']]
[SRC[>>130]]。
[FIG[
- [143] [CODE[[[<!--]]]] があると、それに対応する [CODE[[[-->]]]] が必要です。
- [144] [CODE[[[<!--]]]] と [CODE[[[-->]]]] の間には他の [CODE[[[-->]]]] や
[CODE[<script]] ([[大文字]]または[[小文字]]) の後に[[空白文字]]や [CODE[[[/]]]] や [CODE[[[>]]]]
が続く文字列が入ってはいけません。
]FIG]
[141] [[HTML]] の[[構文解析器]]は [CODE(HTMLe)@en[[[script]]]] [[要素]]内において [CODE[[[<!--]]]]
と [CODE[[[-->]]]] の対応関係や [CODE[<script>]] と [CODE[</script>]]
の対応関係を考慮して複雑な解釈を行います。それに反して [[HTML]] として[[直列化]]できない値や混乱を招くものを禁止するために
>>140 のような規定があります。
*** 擬似注釈宣言の使用
[18] [CODE(HTMLe)[script]] 要素に対応していない古い WWW ブラウザは、
[CODE(HTMLe)[script]] 要素内の[[文字データ]]も構わず解釈してしまいます。
そこで、 [CODE(HTMLe)[script]] 要素の内容としてスクリプトを記述するときには、
HTML の[[注釈宣言]]のように最初に [CODE(HTML)[<!--]] を、
最後に [CODE(HTML)[-->]] をつけることが慣習となっています。
HTML 4 によれば、これは HTML の機能ではなく、[[スクリプト機関]]の機能とされています。
この機能に対応している言語には [[JavaScript]], [[VBScript]], [[Tcl]]
があるようです。 [SRC[HTML 4 18.3.2]] より正確には、この3つの言語は
[CODE(HTMLe)[script]] 要素の内容の一番最初の非[[空白]]文字列が
[CODE[<!--]] であるとき、これを無視するらしいです。
最後の [CODE[-->]] は、3つの言語のいずれも、それだけで書くことはできず、
それぞれの言語の注釈の内容として (JavaScript の場合は [SAMP(JS)[// -->]]
のようにして) 書くことが必要らしいです。
[Q[らしい]]というのは、正確にこれを規定した仕様がないからです。
HTML 4 は[Q[スクリプト機関]]によるものだと言っていますから、
スクリプト言語の言語仕様かなにかに規定があってもよさそうなものですが、
そのようなものは見たことがありません。また、 HTML
に直接埋め込まれていない [[ECMAScript]] のスクリプトのソース・コードに
[CODE[<!--]] という文字列があってもよいという話も聞きません。
([CODE(HTMLe)[[[style]]]] 要素も同じような事情ですが、こちらは
[[CSS2]] で言語仕様の一部としてきちんと定義されています。)
[42] 少なくても [[JavaScript]] では、
最初の [SAMP[<!--]] が含まれる行の行末までを無視するのが
Web ブラウザの普通の実装のようです。
[27] このような注釈宣言 (のようなもの) の中では、 (SGML
的には [CODE(SGML)[CDATA]] なので注釈宣言ではないとはいえ、
古い UA の立場からしても SGML 的に正当であるために) [CODE(SGML)[[[COM]]]]
([CODE(HTML)[--]]) を含めるべきではないと考える人もいます。
[19] なお、 XHTML 1 の [CODE(HTMLe)[script]] 要素は、 [CODE(SGML)[CDATA]]
ではありませんので、注釈宣言 (のようなもの) を書くと、
本当に XML の注釈宣言と解釈されてしまいます。当然、
スクリプトとして解釈・実行されることはありません。
[40] [CODE(HTMLe)[script]] 要素が使われ始めたばかりの1996年ごろまでは、
注釈宣言 (のようなもの) の閉じの前に
[PRE(HTML)[
<script language="javascript">
<!-- hide script from old browsers
[VAR[...]]
// hide script from old browsers -->
</script>
]PRE]
のように自然言語の注釈を入れておくことがよく行われていました
(初期の使用例にそう載っていたからみんなで真似したのでしょう)。
(この例のように開き (のようなもの) の後に書くこともできましたが、
閉じの前に書くのが普通だったと記憶しております。)
後にこのような冗長なことはせず、
[PRE(HTML)[
<script language="javascript">
<!--
[VAR[...]]
//-->
</script>
]PRE]
のように簡単に書くようになりました。
[35] また、[Q[裏技]]的なものとして、
[PRE(HTML)[
<script language="javascript">
<!--
[VAR[...]]
// -->スクリプトに対応していません。<!--
[VAR[...]]
// -->
</script>
]PRE]
のような書き方が紹介されることもありました。
(この例のようになぜかスクリプトの途中に書いているものもあれば、
注釈宣言 (のようなもの) の前後に書いているものもありました。
どこに入れるにせよ、書く内容は一行にするか、
うまくして行頭にスクリプト言語の注釈導入子が来るように調整することが重要です。
また、 [CODE(SGML)[[[etago]]]] が使えないことにも注意が必要です。)
[38] スクリプト言語の演算子として [CODE[>]] を使うことが良くありますが、
古いブラウザの中には注釈宣言を [CODE[>]] で終えてしまうものがあることが知られています。
[SAMP(JS)[[VAR[x]] > [VAR[y]]]] のような式は [SAMP(JS)[[VAR[y]] < [VAR[x]]]]
と書くことで回避できます。 [SRC[HTML 4 18.3.2 Note]]
もっとも、そのようなブラウザは HTML 4 の時点でも骨董品ですし、
HTML 4 も特にそうするべきだなどとは言っていません。
参考文献:
- [16] [CITE[<SCRIPT>〜</SCRIPT> 内の要素はすべてコメントで囲んだ方が安全です。]]
<http://openlab.ring.gr.jp/k16/htmllint/explain.html#comment-element>
誤って「[CODE(JS)@en[//->]]」のようなもので終わることもあるみたいです。
* 状態
[246]
[FIG(list members)[
: [DFN[[RUBYB[「開始済み」]@en["already started"]]]]フラグ :
初期状態では未設定です [SRC[>>130]]。
: [DFN[[RUBYB[「構文解析器挿入」]@en["parser inserted"]]]]フラグ:
[[構文解析器]]が挿入した [CODE(HTMLe)@en[[[script]]]] [[要素]]に設定されます。
初期状態では未設定です [SRC[>>130]]。
: [DFN[[RUBYB[「非ブロッキング」]@en["non-blocking"]]]]フラグ :
初期状態では設定されます [SRC[>>130]]。
: [DFN[[RUBYB[「構文解析器実行準備完了」]@en["ready to be parser-executed"]]]]フラグ :
初期状態では未設定です [SRC[>>130]]。
: [[スクリプトの型]] :
[[古典スクリプト]]と[[モジュールスクリプト]]の別を表します。
初期状態では未設定です [SRC[>>130]]。
]FIG]
[HISTORY[
[183] かつては次の状態がありました。
[FIG(short list)[
- [F[[[スクリプトブロックの型]]]]
]FIG]
]HISTORY]
* cloning steps
[247] [[cloning steps]] 参照。
* 適合性検査
[136] [CODE(HTMLe)@en[[[script]]]] [[要素]][VAR[要素]]の[[属性]]と[[内容]]の[[適合性]]の検査は、
次のように行えます。
[FIG(steps)[
= [138] [VAR[型]]を、[VAR[要素]]の [F[[CODE(HTMLa)@en[[[type]]]] [[属性値]]]]に設定します。
= [195] [VAR[型]]により、
[FIG(switch)[
:[234] null:
[FIG(steps)[
= [220] [VAR[検査]]を、「[CODE[[[Script]]]] としての検査」に設定します。
= [207] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[async]]]] [[属性]]]]と
[F[[CODE(HTMLa)@en[[[defer]]]] [[属性]]]]の両方があれば、
警告します。
]FIG]
:[223] [[JavaScript MIME型]]:
[FIG(steps)[
= [224] [VAR[検査]]を、「[CODE[[[Script]]]] としての検査」に設定します。
= [225] 原則として不適合であると報告します。
= [226] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[async]]]] [[属性]]]]と
[F[[CODE(HTMLa)@en[[[defer]]]] [[属性]]]]の両方があれば、
警告します。
]FIG]
:[196] [CODE[[[module]]]] ([[ASCII大文字・小文字不区別]]):
[FIG(steps)[
= [221] [VAR[検査]]を、「[CODE[[[Module]]]] としての検査」に設定します。
= [198] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[charset]]]] [[属性]]]]があれば、不適合を報告します。
= [199] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[defer]]]] [[属性]]]]があれば、不適合を報告します。
]FIG]
:[197] それ以外:
[FIG(steps)[
= [222] [VAR[検査]]を、[VAR[型]]によって決まる検査 (なければ null) に設定します。
= [202] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[async]]]] [[属性]]]]があれば、不適合を報告します。
= [200] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[charset]]]] [[属性]]]]があれば、不適合を報告します。
= [204] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[crossorigin]]]] [[属性]]]]があれば、不適合を報告します。
= [201] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[defer]]]] [[属性]]]]があれば、不適合を報告します。
= [205] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[nonce]]]] [[属性]]]]があれば、不適合を報告します。
= [203] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[src]]]] [[属性]]]]があれば、不適合を報告します。
= [206] [VAR[型]]が[[妥当なMIME型]]であるか検査します。
= [235] [VAR[型]]の[F[[[引数]]]]を無視すると [[JavaScript MIME型]]になるなら、警告します。
= [236] [VAR[型]]がかつて[[スクリプト言語]]に用いられた値なら、警告します。
]FIG]
]FIG]
= [214] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[src]]]] [[属性]]]]があれば、
== [219] [VAR[検査]]が「[CODE[[[Script]]]] としての検査」で[VAR[要素]]に
[F[[CODE(HTMLa)@en[[[crossorigin]]]] [[属性]]]]があれば、
警告します。
== [210] [VAR[要素]]の [F[[CODE(HTMLa)@en[[[src]]]] [[属性]]]]を検査します。
== [245] [VAR[要素]]の[F[[[内容]]]]のドキュメント制約を検査します。
= [217] それ以外なら、
== [218] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[charset]]]] [[属性]]]]があれば、不適合を報告します。
= [211] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[async]]]] [[属性]]]]があれば、検査します。
= [215] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[charset]]]] [[属性]]]]があれば、検査します。
= [212] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[crossorigin]]]] [[属性]]]]があれば、検査します。
= [216] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[defer]]]] [[属性]]]]があれば、検査します。
= [213] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[nonce]]]] [[属性]]]]があれば、検査します。
= [209] [VAR[要素]]の[F[[[属性]]リスト]]のうち、以上で検査していない[[属性]]を検査します。
= [208] [VAR[検査]]の値により、
[FIG(switch)[
:[233] null:
[FIG(steps)[
= [228] 検査不能を報告します。
]FIG]
:[227] 「[CODE[[[Script]]]] として検査」か「[CODE[[[Module]]]] として検査」:
[FIG(steps)[
= [237] [VAR[要素]]に [F[[CODE(HTMLa)@en[[[src]]]] [[属性]]]]があれば、
== [239] [[古典スクリプトのfetch]]を実行します。
[VAR[URL]] を[VAR[要素]]の [CODE(DOMa)@en[[[src]]]] [[IDL属性]]の値、
[VAR[CORS設定群]]を[VAR[要素]]の [CODE(DOMa)@en[[[crossorigin]]]] [[属性値]]、
[VAR[文字符号化]]を[VAR[要素]]の [CODE(DOMa)@en[[[charset]]]] [[属性値]]とします。
[VAR[続きの処理]]は、[VAR[スクリプト]]についての次のような処理とします。
=== [240] [VAR[スクリプト]]の[F[[[ソーステキスト]]]]について、[VAR[検査]]を実行します。
=== [243] [VAR[charset]] を、 [VAR[スクリプト]]の生成に使われた[[応答]]の
[F[[[Content-Typeメタデータ]]]]の[F[[CODE(MIME)@en[[[charset]]]]]]に設定します。
=== [241] [VAR[charset]] があり、[VAR[要素]]の [CODE(DOMa)@en[[[charset]]]] [[属性]]もある場合、
==== [242] [VAR[charset]] と[VAR[要素]]の [CODE(DOMa)@en[[[charset]]]] [[属性]]とどちらも同じ[[符号化]]の[[ラベル]]であるか検査します。
= [238] それ以外なら、
== [229] [VAR[ソーステキスト]]を、[VAR[要素]]の [F[[CODE(DOMa)@en[[[text]]]] [[IDL属性]]の値]]に設定します。
== [230] [VAR[ソーステキスト]]について、[VAR[検査]]を実行します。
]FIG]
:[231] それ以外:
[FIG(steps)[
= [232] [VAR[要素]]について、[VAR[検査]]を実行します。
]FIG]
]FIG]
= [244] [VAR[要素]]の[[内容]]の共通の制約を検査します。
@@ [CODE(HTMLa)@en[[[language]]]]
]FIG]
* 処理
[28] [CODE(HTMLe)[script]] 要素によるスクリプトは、
文書の読込み時に実行されます [SRC[HTML 4 18.1]]。
[CODE(HTMLa)[src]] 属性による外部スクリプトは優先的に実行されるという説を唱える人がいますが、
根拠は不明です。特定の UA ではそうなのかもしれませんが、
少なくても HTML 4 は何も規定していません。
但し、 [CODE(HTMLa)[[[defer]]]] 属性や [CODE(HTMLa)[[[event]]]]
属性は実行時機に影響するのかもしれません。
** 構文解析との関係
[63]
[CODE(HTMLa)@en[[[defer]]]]、[CODE(HTMLa)@en[[[async]]]] なしの場合で、
[CODE(HTMLa)@en[[[src]]]] ありの場合に、外部[[スクリプト]]が実行されるまで[[構文解析]]は停止するか?
[CITE[Index of /~wakaba/-temp/test/html/script/src]] ([TIME[2008-12-16 11:37:00 +09:00]] 版) <http://suika.fam.cx/~wakaba/-temp/test/html/script/src/>
[64] [[HTML]] として記述された [CODE(HTMLe)@en[[[script]]]] [[要素]]の場合 (nodefer-1)、
どのブラウザも[[構文解析]]が停止します。
[65] [[DOM]] によって作成された [CODE(HTMLe)@en[[[script]]]] [[要素]]の場合 (nodefer-script-1)、
[[Opera]] 以外は[[構文解析]]を続行し、外部[[スクリプト]]は準備が出来次第実行します
([[HTML5]] に従った動作)。 [[Opera]] 9.61 は >>64 同様、[[構文解析]]を停止します。
** 実行タイミング
[164] [CODE(HTMLe)@en[[[script]]]] [[要素]]から作成された[[スクリプト]]の実行のタイミングは、
[[構文解析器]]によって作られた [CODE(HTMLe)@en[[[script]]]]
[[要素]]か否かや、[[属性]]の有無により、何種類かあります。
[FIG(list)[
- [169] その場
-- その他の場合
-- その場 (挿入や[[終了タグ]]の時点) で実行されます。
[[スクリプト]]内から呼ばれている場合も、再帰的に[[スクリプト]]を実行します。
- [165] [[pending parsing-blocking script]]
-- ([CODE(HTMLa)@en[[[src]]]] & [["parser-inserted"]]) or [[has a style sheet that is blocking scripts]] の場合
-- [[構文解析器]]によって[[スクリプト]]を実行中ならすべて完了させてから、
必要な[[スクリプト]]や[[スタイルシート]]が読み込まれるまで[[構文解析]]を中断し、
読み込まれた時点で実行され、[[構文解析]]も再開されます。
- [166] [[list of scripts that will execute when the document has finished parsing]]
-- [CODE(HTMLa)@en[[[src]]]] & [CODE(HTMLa)@en[[[defer]]]] & [["parser-inserted"]] の場合
-- [[stop parsing]] が実行します。
- [167] [[list of scripts that will execute in order as soon as possible]]
-- [CODE(HTMLa)@en[[[src]]]] の場合
-- [[fetch]] 完了時の[[タスク]]で実行します。
-- [[構文解析]]実行中に登録された場合、実行完了まで [CODE(DOMe)@en[[[load]]]] を遅延させます。
- [168] [[set of scripts that will execute as soon as possible]]
-- [CODE(HTMLa)@en[[[src]]]] & [CODE(HTMLa)@en[[[async]]]] の場合
-- [[fetch]] 完了時の[[タスク]]で実行します。
-- [[構文解析]]実行中に登録された場合、実行完了まで [CODE(DOMe)@en[[[load]]]] を遅延させます。
]FIG]
[170] >>169、>>165、>>166 は、[[構文解析器]]を呼び出した[[タスク]]の中で直接[[スクリプト]]が同期的に実行されます。
いずれにせよ[[構文解析器]]内部で[[スクリプト]]が実行されるのは、 [[HTML]] または [[SVG]]
の [CODE(HTMLe)@en[[[script]]]] [[終了タグ]] (または
[[SVG]] [CODE(HTMLe)@en[[[script]]]] [[空要素タグ]]) の処理中に限られます。
[171] >>167 と >>168 は、[[構文解析器]]とは別の[[タスク]]で[[スクリプト]]が実行されます。
[172] [[タスク]]は[[イベントループ]]によって処理されるので、
>>171 の場合[[構文解析器]]と[[スクリプト]]が同時に実行されることはありません。
また [[UIイベント]]や [CODE(DOMm)@en[[[setTimeout]]]] の[[コールバック]]などが[[構文解析器]]の動作期間中に実行されることもありますが、
やはり別の[[タスク]]として処理されるので、[[構文解析器]]や他の[[スクリプト]]と同時に実行されることはありません。
[173] なお [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[スクリプト]]は、
それ自体のコードの実行の他に、前後に各種[[イベント]]が[[dispatch]]されたり、
[[エラーの報告]]が行われたりすることがあり、[[同期的]]に複数の[[スクリプト]]が同[[タスク]]内で実行されることがあります
[WEAK[(が、やはり同時にではありません)]]。
[174] [CODE(HTMLe)@en[[[script]]]] [[タグ]]の処理前には[[マイクロタスクチェックポイント]]があり、
[[マイクロタスク]]があればそのタイミングで、つまり[[構文解析器]]と同じ[[タスク]]の内部で同期的に実行されます。
* 安全性
[43]
'''Web メイルにおける HTML メイル''':
[[HTML]] を[[利用者界面]]として利用した [[MUA]]
(いわゆる [[Webメイル]]) で [[HTML]]
[[文書]]が含まれる[[メイル]]・[[メッセージ]]を表示する時には特に注意が必要です。
[CODE(HTMLe)@en[[[script]]]] [[要素]]など[[スクリプト]]が実行され得るものをそのまま
[[HTML]] に含めると、 [[Webブラウザ]]側でその [[HTML]] [[文書]]全体
[WEAK[([[HTMLメイル]]自体とその周りの[[利用者界面]]を含む全体)]]
の権限で[[スクリプト]]が実行されることになります。
[[Webブラウザ]]外に被害が及ぶかという点では通常の鯖側の[[スクリプト]]の安全上の脅威と変わりませんが、
[[利用者界面]]の部分を介して[[利用者]]の意図せぬ (削除などの)
操作を行ったり、受信したメッセージや個人情報が流出したりする危険性があります。
* [CODE(DOMi)@en[HTMLScriptElement]] インターフェイス
[190] [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[要素インターフェイス]]は、
[DFN[[CODE(DOMi)@en[[[HTMLScriptElement]]]]]] です [SRC[>>130]]。
[191] [CODE(DOMi)@en[[[HTMLElement]]]] [[インターフェイス]]を[[継承]]しつつ、
次の[[メンバー]]が定義されています。
[FIG(short list)[
- [CODE(DOMa)@en[[[async]]]]
- [CODE(DOMa)@en[[[charset]]]]
- [CODE(DOMa)@en[[[crossOrigin]]]]
- [CODE(DOMa)@en[[[defer]]]]
- [CODE(DOMa)@en[[[nonce]]]]
- [CODE(DOMa)@en[[[src]]]]
- [CODE(DOMa)@en[[[text]]]]
- [CODE(DOMa)@en[[[type]]]]
]FIG]
* 歴史
[2] [CODE(HTMLe)[script]] 要素は、 [[NN2]] が [[LiveScript]]
と共に実装したのがはじめであると考えられています。
[20] [CODE(HTMLe)[script]] 要素がはじめて公式な仕様書に入ったのは
1997年1月の [[HTML 3.2]] でした。しかし、
このときの最終的な勧告では詳細が決まらず、
将来の版のために予約すると述べるに留まっていました。
> <!ELEMENT SCRIPT - - CDATA -- placeholder for script statements -->
[SRC[HTML 3.2 DTD]]
** HTML4
[12] その後1997年12月の [[HTML 4]] で、 [CODE(HTMLe)[script]]
要素型はようやく正式な仕様の一部となりました。
当時 [[WinIE]] や [[NN]] が実装していた [CODE(HTMLe)[script]]
の基本的な機能が仕様に入りましたが、 WinIE だけが実装していた
[CODE(HTMLa)[event]] 属性と [CODE(HTMLa)[for]] 属性は、
将来のために予約とされました。
[24] 1998年に勧告された [[DOM 1]] やその後の [[DOM 2]] では、
[CODE(HTMLe)[script]] 要素型に対応する [CODE(DOMi)[[[HTMLScriptElement]]]]
界面が定義されています。ここでは、標準の属性の他、
[CODE(HTMLa)[for]] 属性と [CODE(HTMLa)[event]] 属性も[Q[将来の使用のために予約]]
として定義だけされています。
[25] >>24 そんな将来くるのかな〜。来たら嫌だな〜
[26] >>24-25 将来の使用は M$ の仕様の間違いじゃないのかな。
[32]
>>24-26
その後 [[XHTML 1]] が標準化されましたが、予約2属性はやはり正式な仕様には昇格せず、
このまま忘れ去られようとしています。しかし、両属性の機能は拡張して汎用化されて
[[XML事象]]仕様の一部として標準化されました (2002年)。
[REFS[
- [29] [[HTML 4]]
-- [CITE[18 Scripts in HTML documents]]
<IW:HTML4:"interact/scripts.html#edef-SCRIPT">
-- [CITE[Element content]]
<IW:HTML4:"appendix/notes.html#h-B.3.2.1">
- [[ECMA-290]]
- [[XHTML 1.0]]
-- [CSECTION[4.8. Script and Style elements]]
(参考) <IW:XHTML10:"h-4.8">
]REFS]
[4] [CODE(HTMLa)[[[src]]]] 属性が指定されている場合、
スクリプトはその外部資源で定義されます。
[ABBR[[[UA]]] [利用者エージェント]]
は[[内容]]を無視し、指定された
[ABBR[URI] [統一資源識別子]] のスクリプトを取り寄せなければなりません。
[CODE(HTMLa)[src]] 属性が指定されていない場合、
[VAR[UA][利用者エージェント]]
は内容をスクリプトとして解釈しなければなりません。
[SRC[HTML 4 18.2.1]]
[30] [ABBR[[[XHTML]]] [拡張可能ハイパーテキスト・マーク付け言語]]
より前の [ABBR[HTML] [ハイパーテキスト・マーク付け言語]] では、
[CODE(HTMLe)[script]]
要素の内容は [CODE(HTMLe)[[[style]]]] 要素の内容同様[[文字データ]]
([CODE(SGML)[[[CDATA]]]]) 宣言内容とされていました。
つまり、 [CODE(HTMLe)[script]] 要素内ではほとんどの[[マーク]]は認知されず、
[ABBR[[CODE(SGML)[[[etago]]]]] [終了タグ開き]] ([CODE(HTML)[</]]) の
直後に[[名前開始文字]] [WEAK[([[ラテン文字]]など)]] または
[ABBR[[CODE(SGML)[[[tagc]]]]] [タグ閉じ]] ([CODE(HTML)[>]])
が来たらそこで [CODE(HTMLe)[script]] 要素が終わることになっていました。
ですから、スクリプト言語の[[演算子]]などとして
[ABBR[HTML] [ハイパーテキスト・マーク付け言語]]
の[[マーク文字]]が登場することがよくありますが、
そのような場合にもほとんど[[文字参照]]化する必要がありませんでした。
[36]
[ABBR[[CODE(SGML)[[[ETAGO]]]]] [終了タグ閉じ]] がかけないのは
[CODE(JS)[[CODE(DOMa)[[[document]]]].[CODE(DOMm)[[[write]]]]]]
のデータを作る時などにしばしば問題となり、その最盛期には、
これが原因でうまく動かないことに悩む人もよく見受けられました。
回避するためには、そのスクリプト言語の文字列連結を使ったり
([SAMP(JS)['<' + '/a>']])、 escape (quote) 機能を使ったり
([SAMP(JS)['<\/a>']])、文字生成関数を使ったり
([SAMP(VB)["<" & [[Chr]] (47) & "a>"]])
する方法がよく紹介されました。
[33] しかし、 [ABBR[[[XML]]] [拡張可能マーク付け言語]] では
[ABBR[[CODE(SGML)[CDATA]]] [文字データ]] 宣言内容は使えないので、
[ABBR[[[XHTML 1]]] [拡張可能ハイパーテキスト・マーク付け言語 1]] では
[ABBR[[CODE(XML)[[[PCDATA]]]]] [解析可能文字データ]]
と宣言されています。
ですから、 [ABBR[[CODE(SGML)[STAGO]]] [開始タグ開き]]
([CODE(XML)[<]]) は必ず [[escape]]
して [CODE(XML)[<]] としなければならないなどの制限があります。
これを回避するために [[[CODE(XML)[CDATA]]区間]]を使う方法がよく紹介されますが、
そうすると多くの既存の [ABBR[WWW] [World Wide Web]]
ブラウザとの互換性が失われてしまいます。
ですから、 [ABBR[XHTML] [拡張可能ハイパーテキスト・マーク付け言語]] で
[CODE(HTMLe)[script]] 要素を使う時は [CODE(HTMLa)[src]]
属性を使った外部スクリプトとするのが良いと言われています。
[41]
[CODE(HTMLa)[src]] で指定された資源が取得できない時に内容を使うとする説があります。
[CITE[SCRIPT - Client-side Script(jp)]] <http://www.htmlhelp.com/ja/reference/html40/special/script.html>
しかし、 [ABBR[HTML] [ハイパーテキスト・マーク付け言語]] 4
の規定と矛盾します。
[WEAK[(この文書はほんとうに [ABBR[HTML] [ハイパーテキスト・マーク付け言語]] 4 に基づいているのでしょうか?)]]
[47]
[CITE[Working with the WebKit Nightly Builds]] <http://developer.apple.com/opensource/internet/nightlywebkit.html>
([[名無しさん]] [WEAK[2006-11-05 02:47:22 +00:00]])
[48]
[CITE[Surfin’ Safari - Blog Archive » Understanding HTML, XML and XHTML]] <http://webkit.org/blog/?p=68>
[EG[
[37] 二乗した結果を書き出す例 [SRC[HTML 4 18.3.2 改]]
[[JavaScript]] による例
[PRE(HTML)[
<SCRIPT type="text/javascript">
<!-- to hide script contents from old browsers
function square(i) {
document.write("The call passed ", i ," to the function.","<BR>");
return i * i;
}
document.write("The function returned ",square(5),".");
// end hiding contents from old browsers -->
</SCRIPT>
]PRE]
[[VBScript]] による例
[PRE(HTML)[
<SCRIPT type="text/vbscript">
<!--
Function Square(i)
Call Document.Write("The call passed ",i," to the function.","<BR>")
Square = i * i
End Function
Document.Write("The function returned ",Square(5),".")
' -->
</SCRIPT>
]PRE]
[[Tcl]] による例
[PRE(HTML)[
<SCRIPT type="text/tcl">
<!-- to hide script contents from old browsers
proc square {i} {
document write "The call passed $i to the function.<BR>"
return [expr $i * $i]
}
document write "The function returned [square 5]."
# end hiding contents from old browsers -->
</SCRIPT>
]PRE]
]EG]
** 実装
[31] [CODE(file)[[[CGI.pm]]]] は、 XHTML 出力 mode だと、
[[注釈宣言]]内に [[[CODE(XML)[CDATA]]区間]]宣言という素晴らしい出力をしてくれます(w
[50]
[CITE[Bug 60724 – <script> tag inside <applet> tag executes if Java enabled]] ([CODE[2007-02-10 13:51:33 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=60724>
([[名無しさん]])
[[#comment]]
** 不思議解釈
[34]
[CODE(HTMLa)[src]] 属性のある [CODE(HTMLe)[script]] の中に
[CODE(HTMLe)[noscript]] を書く困った人がいます。。。
([[名無しさん]] [WEAK[2004-09-14 07:54:57 +00:00]])
[17] 仕様によれば (>>4)、 [CODE(HTMLa)[src]] 属性があるとき UA
は内容を無視しなければなりません。この規定に特に条件は無いようなので、
スクリプト未対応の UA であっても同様でしょう。
ですから、 [CODE(HTMLe)[script]] の中に [CODE(HTMLe)[noscript]]
を書くと、 HTML 4 対応の [CODE(HTMLe)[script]] 未対応 UA
には無視されてしまうはずです。
[15]
しかし、[[不思議マーク付け]]の世界や多くの [[WWWブラウザ]]の実装では、
[CODE(HTMLe)[[[html]]]] タグの前後や [CODE(HTMLe)[head]] 要素と
[CODE(HTMLe)[body]] 要素の間を含めて、あらゆる場所に出現できるようです。
[CITE[ダイナミックHTML入門]]
(Bruce Campbell + Rick Darnell 著, 安藤慶一訳) という入門書では、
[Q[スクリプトの場所に関しては標準規格は必要ないようです]<urn:isbn:4-89471-048-X>]
などと電波を飛ばしているそうです。
[SRC[[CITE[いくつかの書籍のあらさがし]] <http://openlab.ring.gr.jp/k16/htmllint/findfault.html#dynamic-html>]]
** 他との関係
[3] [[ASP]] などの鯖側で HTML 文書 (もどき) を前処理する類のシステムの一部では、
[CODE(HTMLe)[script]] 要素 (のようなもの) を拡張して、
[CODE[[[runat]]]] 属性などを付与して鯖側で実行するものと [CODE(HTMLe)[script]]
要素としてクライアントに送信するものを区別していることがあります。
(そのような実現方法は開発者がスクリプトの実行を正しく把握しづらくなるのではないかとの懸念はあります。
その点、 [[NES]] のように [CODE[[[server]]]] 要素型という別の要素型を用意するのは一つの考えではありますが、
どんぐりのせいくらべといったところでしょう。)
[13] スクリプトによって HTML 文書を動的に扱う方法として、 [[JavaScript]]
の [CODE(js)[[[document]].[[write]]]] がよく使われました。
([CODE(js)[document.write]] は後に [[DOM 1]] で [CODE(DOMi)[[[HTMLDocument]]]]
界面の [CODE(DOMm)[[[write]]]] method として標準化されています。)
HTML 4 仕様書は読み込み時のスクリプトによる文書に書き換えについても規定していますが、
その内容は [CODE(js)[document.write]] (と同様なもの)
を想定しているようです。実際に使われていたのも [CODE(js)[document.write]]
(と同様なもの) だけでしょう。というわけで、 [CODE(DOMm)[[[write]]]]
method の説明もご覧ください。
[39] スクリプトに対応していなかったり、実行しないことにしていたりするときの[[代替内容]]を提供する
[CODE(HTMLe)[[[noscript]]]] が用意されています。アクセス可能性の確保のために、
重要な情報を提供する [CODE(HTMLe)[script]] は、
対応する [CODE(HTMLe)[noscript]] 要素を用意しておくことが極めて望ましいと考えられます。
[45]
[[XML事象]]の仕様書には[[事象取扱器]]として
[CODE(HTMLe)@en[[[script]]]] を使う例があり、
[[Opera]] 9 でも [CODE(HTMLe)@en[[[script]]]]
を[[事象取扱器]]にできるように実装されています。
が、 [[XML事象]]の[[属性]]がある
[CODE(HTMLe)@en[[[script]]]] [[要素]]も、
[[文書]]読込み時には[[属性]]がないときと同じように実行されてしまうので、
あまり使いやすくありません。
** XHTML2
[73] [[XHTML2]] 第6次案までは [CODE(HTMLe)@en[[[script]]]] [[要素]]がありましたが、
第7次案で [CODE(HTMLe)@en[[[handler]]]] に改名されました。
** メモ
[44]
[CITE[XHTML Frequently Answered Questions]] <http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite>
[[HTML 4]] は [[SGML]] [[応用]]なのに
[CODE(JS)@en[[[document]].[[write]]]]
が使えて、
[[XHTML 1]] は [[XML]] [[応用]]だから
[CODE(JS)@en[[[document]].[[write]]]]
が使えないというのはよくわからない。
([[名無しさん]] [WEAK[2006-08-05 06:53:16 +00:00]])
[46]
[CITE[404 Blog Not Found:javascript - scriptタグによる通信が特許侵害!?]] <http://blog.livedoor.jp/dankogai/archives/50677817.html>
([[名無しさん]] [WEAK[2006-11-04 02:20:29 +00:00]])
** script 要素 (ASP)
,HTML (>>9) に加えて、 ,== ,== ,==
,runat ,server ,なし ,動作場所 >>5
[5] [CODE[runat]] は、 [[M$]] の [[ASP]] で使われて、値が [CODE["server"]]
である場合に、その要素のスクリプトはサーバーで処理されます。
(クライアントには送られません。) この属性は [[W3C]]
の規格では規定されていません。サーバーで処理される以外で使ってはいけません。
- [6] >>2-3,>>5 [CODE[language]] 属性や [CODE[type]] 属性を省略しても [CODE[<%@ Page Language="VB" %>]] みたいのが書いてあれば、それ以降の部分で解釈されるサーバー側スクリプトはその言語で解釈されるそうです。
- [7] >>5-6 それから、 [CODE[runat]] 属性はどんな要素にも? 使えて、サーバー側スクリプトからアクセス可能なことを表す?らしいです。全くもって理解不能な世界ですが。。。
- [8] >>2 ASP での既定値は (設定ファイルで変更しない限り) [CODE[VB]] (= [[VBScript]]) だそうです。
** script 要素型 (CSP)
- [10] CSP の script 要素では runat="server"/"compiler" の属性があります。 ''Introduction to Cache Server Pages - The CSP Compiler'' <http://www.cacheinfo.com/document/V401/cpi/cpitagbased.html>
- [11] このほか CSP の script 要素には色んな独自拡張属性 (もしかして自由に作れる?) があります。 ''技術サポート'' <http://www.cacheinfo.com/techinfo.htm>
** msxsl:script 要素 (M$XML の XSLT 実装)
[21] [CODE(XML)[{urn:schemas-microsoft-com:xslt}:script]]
要素を使うと、 [[XSLT]] (の [[XPath]] を使う文脈)
で利用者定義の関数を使用することが可能となります。
親要素は xslt:[[stylesheet]] 要素又は xslt:[[transform]]
要素です。内容は #[[PCDATA]] です (たぶん)。
,implements-prefix ,名前空間接頭辞 ,必須 ,関数の名前空間
,language ,html:[[language]] と同じ ,不明 ,スクリプト言語
[[language]] 属性には [CODE(HTML)[html:script]]
要素の場合と同じ値を指定できるそうです。
[CODE(XML)[implements-prefix]] 属性には、 XSLT
側で関数を呼ぶ際の [[XML名前空間]]接頭辞を与えます。
この値は自分以上の要素の [[xmlns]]
属性を使って宣言されていなければならないはずです。
[22] 言葉で説明するより実例を見たほうが分かりやすいでしょう。
[PRE[
<xslt:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:foo="http://foo.example/">
<msxsl:script language="JScript" implements-prefix="foo">
function bar (baz) {
return baz;
}
</msxsl:script>
<xslt:template select="element1">
<xslt:apply-templates select="foo:bar(element2)"/>
</xslt:template>
</xslt:stylesheet>
]PRE]
この場合は関数 [CODE(XPath)[foo:bar(baz)]] は引数 [CODE(JS)[baz]]
をただ返すだけの何の面白味もないものですが、
雰囲気はつかめるでしょう。
- ''XSLT Elements'' <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/htm/xsl_elm_qz_4s50.asp>
[[#comment]]
- ''XSLT 1.0で正規表現を使う(MSXML限定)'' <http://members.jcom.home.ne.jp/jintrick/Personal/d20031l.html#d22_4>
[[#comment]]
* xalan:script 要素 (Xalan-Java XSLT 実装)
[23] [[Xalan]] では [[XSLT]] [[スタイル・シート]]で
[[JavaScript]] などを使うのに [CODE(XML)[xalan:script]]
要素を使います。
親要素は xalan:[[component]] 要素です。
,lang ,CDATA ,必須 ,スクリプト言語
,src ,[[URI]] ,(指定なし) ,外部スクリプト参照
[[HTML]] や MSXML での書き方と互換性はありません。
- ''Xalan-Java Extensions'' <http://xml.apache.org/xalan-j/extensions.html>
** HTML5
[49]
[CITE[Bug 178258 – document.forms has no properties on a page without <body> (JavaScript error)]] ([CODE[2007-01-29 17:04:28 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=178258>
[79]
図にしましたwwww [[script要素の内容の制約の図]]
[51]
[CITE@en[HTML5 script start tag should select appropriate content model according to src]] ([[David Woolley]] 著, [CODE[2007-04-21 22:52:46 +09:00]] 版) <http://lists.w3.org/Archives/Public/www-html/2007Apr/0053.html>
([[名無しさん]] [WEAK[2007-04-28 03:58:40 +00:00]])
[52]
[CITE[HTML5 IRC logs: w3c / #html-wg / 20070423]] ([CODE[2007-06-30 15:38:51 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/html-wg/20070423#l-144>
> [03:47] <mjs> Lachy: since you were discussing Safari's handling of <script /> earlier, we might make that a Dashboard-only quirk - we foolishly did it for Firefox compatibility, and then a huge number of Dashboard widgets started relying on it, and now Firefox no longer handles it as empty in HTML
([[名無しさん]])
[53]
[CITE@en[http charset, <script> and IE]] ([[tex]] 著, [CODE[2007-07-30 06:33:36 +09:00]] 版) <http://lists.w3.org/Archives/Public/www-international/2007JulSep/0040.html>
([[名無しさん]])
[54]
[CITE[“消えた初音ミク”問題 ヤフーとGoogle「原因を調査中」 - ITmedia News]] ([CODE[2007-10-18 22:03:18 +09:00]] 版) <http://www.itmedia.co.jp/news/articles/0710/18/news065.html>
>
[PRE(HTML example code)[
<script language="JavaScript" type="text/javascript">
<!--
var pid="784200073";
var locs="ITOT1";
var random=new Date();
var js_url='http://dlv.itmedia.co.jp/adsv/v1?posall='+locs+'&id='+pid+'&rnd='+random.getTime();
document.write('<sc'+'ript language="JavaScript" type="text/javascript" src="'+js_url+'">');
document.write('</sc'+'ript>');
//-->
</script>
]PRE]
([[名無しさん]])
[55]
[CITE@en[Re: <script> for non-script content]] ([[Ian Hickson]] 著, [CODE[2008-05-14 16:53:44 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2008May/0291.html>
([[名無しさん]])
[56]
[CITE@ja[冬様もすなる☆日記というもの (2008年7月)]] ([[わかば]] 著, [CODE[2008-07-21 17:28:49 +09:00]] 版) <http://suika.fam.cx/~wakaba/d/d200807#d21-1>
([[名無しさん]])
[57]
[CITE@ja[Kanasan.JS JavaScript 第 5 版読書会 #5: Days on the Moon]] ([CODE[2008-07-26 22:46:16 +09:00]] 版) <http://nanto.asablo.jp/blog/2008/07/25/3648120>
([[名無しさん]])
[58]
[CITE@en[OpenSocial Data Pipelining - OpenSocial Specifications]] ([CODE[2008-09-04 06:00:40 +09:00]] 版) <http://wiki.opensocial-templates.org/index.php?title=OpenSocial_Data_Pipelining>
([[名無しさん]])
[60]
[CITE[High Performance Web Sites :: “Delayed Script Execution” in Opera]] ([CODE[2008-09-17 13:31:22 +09:00]] 版) <http://www.stevesouders.com/blog/2008/09/11/delayed-script-execution-in-opera/>
[62] [CITE[John Resig - JavaScript Micro-Templating]] ([TIME[2008-12-13 10:11:52 +09:00]] 版) <http://ejohn.org/blog/javascript-micro-templating/>
[59]
[[OSML]] で[[鯖]]側で処理される [[HTML]] 片の [CODE(HTMLe)@en[[[script]]]]
[[要素]]
([CODE(HTML)@en[[[type]]="[[text/os-data]]"]] や
[CODE(HTML)@en[[[type]]="[[text/os-template]}"]] には、]]
[CODE(HTMLa)@en[[[beforeData]]]]
や [CODE(HTMLa)@en[[[requireData]]]] のような[[属性]]を更に指定できます。
([[名無しさん]])
[61]
[CITE[Bug 304786 – dynamically inserting/adding xul:script via DOM doesn't work]] ([TIME[2008-10-09 11:53:54 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=304786>
[66] [CITE['''['''JavaScript''']''' とてもシンプルに自分自身が属する script 要素を取得 - IT戦記]] ([TIME[2008-12-27 15:22:12 +09:00]] 版) <http://d.hatena.ne.jp/amachang/20061201/1164986067>
[67] [CITE[Scripting – SVG Tiny 1.2]] ([TIME[2008-12-20 02:31:29 +09:00]] 版) <http://www.w3.org/TR/2008/REC-SVGTiny12-20081222/script.html#ScriptElement>
[71] [CITE[Index of /script-execution]] ([TIME[2009-02-03 10:44:50 +09:00]] 版) <http://testsuites.opera.com/script-execution/>
[72] [CITE[SVGを直接HTMLに埋め込む方法(プラグインを使わない) - dhrnameの開発日誌]] ([TIME[2009-01-31 21:23:50 +09:00]] 版) <http://d.hatena.ne.jp/dhrname/20080105/1199534939>
[74] [CITE@en[Re: '''['''HTML5''']''' DOMContentLoaded fires before CSS resources loaded?]]
([[Ian Hickson]] 著, [TIME[2009-08-02 19:04:59 +09:00]] 版)
<http://lists.w3.org/Archives/Public/public-html/2009Aug/0064.html>
[75] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-10-11 19:13:48 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4102&to=4103>
[76] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-10-20 21:51:45 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4177&to=4178>
[77] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-10-20 21:53:34 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4178&to=4179>
[78] [CITE[IRC logs: freenode / #whatwg / 20091026]]
([TIME[2009-12-14 01:01:55 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091026#l-421>
[80] [CITE[Forum Nokia - Driving innovation for mobile application developers]]
([TIME[2010-01-23 15:04:02 +09:00]] 版)
<http://www.forum.nokia.com/>
[81] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-07-14 22:43:50 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=5156&to=5157>
[82] [CITE['''['''whatwg''']''' The choice of script global object to use when the script element is moved]]
([TIME[2010-09-09 06:50:19 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-September/028457.html>
[83] [CITE@en[Web Applications 1.0 r5449 Make the 'already started' flag actually work. Also, reorder things in the 'run' algorithm so that we check things in order of cost to check, instead of doing the work up front and then the checks afterwards.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10240]]
( ([TIME[2010-09-09 07:17:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5448&to=5449>
[84] [CITE@en[Web Applications 1.0 r5496 Allow parser-inserted scripts to rerun if they failed to be run by the parser.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10519]]
( ([TIME[2010-09-26 04:26:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5495&to=5496>
[85] [CITE@en[Web Applications 1.0 r5499 Make policy checks for <script> happen after the flag is set that prevents the script from being run again, so that if somehow an attacker causes a document to be reinserted somewhere that has scripts enabled, the scripts still won't run.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10523]]
( ([TIME[2010-09-26 04:59:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5498&to=5499>
[86] [CITE@en[Web Applications 1.0 r5545 Match Gecko for character encoding processing for <script>Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10656]]
( ([TIME[2010-09-29 10:04:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5544&to=5545>
[87] [CITE@en[Web Applications 1.0 r5597 add a note about script executionFixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10539]]
( ([TIME[2010-10-12 07:02:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5596&to=5597>
[88] [CITE@en[Web Applications 1.0 r5663 Make style sheets block scripts even in descendant documentsFixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10575]]
( ([TIME[2010-11-02 08:30:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5662&to=5663>
[89] [CITE@en-us[Using Inline XAML]]
( ([TIME[2011-01-04 20:58:07 +09:00]] 版))
<http://msdn.microsoft.com/en-us/library/cc189016%28v=vs.95%29.aspx>
[90] [CITE@en[Data Binding - Ample SDK]]
( ([TIME[2011-01-04 20:58:05 +09:00]] 版))
<http://www.amplesdk.com/examples/core/aml/databinding/>
[91] [CITE[''''''[''''''whatwg'''''']'''''' Re: rel="script"]]
( ([TIME[2011-01-19 23:51:17 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2005-July/004503.html>
[92] [CITE[''''''[''''''whatwg'''''']'''''' The choice of script global object to use when the script element is moved]]
( ([TIME[2011-02-02 22:51:39 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-February/030170.html>
[93] [CITE@en[Web Applications 1.0 r5817 Make script-inserted external scripts that have .async=false execute in the insertion order, default to true]]
( ([TIME[2011-02-03 14:34:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5816&to=5817>