[9] Web におけるスクリプトは、 Webブラウザーで実行されるプログラム片です。 スクリプトには古典スクリプトとモジュールスクリプトがあります。
[118] スクリプトには、古典スクリプトとモジュールスクリプトがあります >>11。
[159] JavaScript では両者をそれぞれスクリプトとモジュールと呼んでいます
>>158。 HTML の用語 (>>118) は、どちらも script
要素を通じて利用することによります >>158。
[163] script
要素はスクリプトの型を持ちます。
初期状態では未設定です。値は classic
や module
です。 >>162
[99] WorkerGlobalScope
には型があり、
その値は classic
か module
のいずれかです。 >>98
それぞれ古典スクリプトとモジュールスクリプトを表します。
[25] サービスワーカーは、型を持ちます。
その値は classic
か module
のいずれかです。
初期値は classic
です。 >>24 それぞれ古典スクリプトとモジュールスクリプトを表します。
[34] ジョブは、ワーカー型を持ちます
>>33。その値は classic
か
module
のいずれかです >>33。
[155] ワーカーの作成時には、 WorkerOptions
辞書の
type
メンバー >>100 や
ServiceWorkerOptions
辞書の
type
メンバー >>32 の値により、
古典スクリプトかワーカースクリプトのいずれかを指定できます。
値は WorkerType
>>100, >>32、すなわち
classic
か
module
のいずれか >>156 です。
type
省略時の既定値は classic
です >>100, >>32。
[122] モジュールスクリプトは、次の状態をも持ちます。
[26] サービスワーカーは、
スクリプト資源を持ちます。
値はスクリプトまたは null
です。初期値は null
です。
>>30
[31] スクリプト資源は、 (null
でないときに) 次の状態を持ちます。
[157] スクリプトのfetchも参照。
[27] イベントハンドラー (getting the current value of the event handler) HTML Standard
も以前はスクリプトを使っていましたが、現在はスクリプトではなく、
単なる JavaScript の Function
として定義されています。
[40] 仕様書が存在しませんが、歴史的には次のものもありました。
[66] この他に、ブラウザー拡張や WebDriver などによってスクリプトが注入されることもあり得ます。 (それがここでいうスクリプトなのかどうかは謎です。それぞれのアーキテクチャ次第で動作が異なるかもしれません。)
[124] 古典スクリプトの作成は、 ソーステキスト、 設定群、 エラーミュートフラグ (既定値は偽)、 オプション群、 基底URLについて、 次のようにします >>38。
[127] モジュールスクリプトの作成は、 ソーステキスト、 設定群、 スクリプト基底URL、 オプション群について次のようにしなければなりません >>38。
ParseModule(ソーステキスト, 設定群の Realm, スクリプト)
に設定します。TypeError
に設定します。[20] スクリプトは、イベントハンドラーとして用いられるものを除けば >>10 のいずれもその場で作られ、 実行され、スクリプトへの参照は残らないので、実行が終わり次第ごみ収集されることになります。
[21] イベントハンドラーについては作られた後何度も実行され得るので、他のイベントハンドラーに置き換えられるなり、
EventTarget
もろともごみ収集されるなりするまで、ごみ収集されずに残ることになります。
[5]
HTML文書は、 script
の処理の前後いずれにおいても、 HTML DTD
に適合しなければなりません。 HTML4 18.2.4
[4] 仕様書:
[6] HTML 4 の >>5 の規定はスクリプトが生成する HTML 文書片の適合性に関する議論でしばしば引用されますが、 時期や内容からしても、 HTML 4 はおそらく HTML 文書全体にアクセス可能な現在の DOM を想定していません。 現実の Webブラウザの処理モデルとも一致していませんし、 それほど価値がある引用だとは思えません。
[57] 著者から観測可能な範囲において、複数のスクリプトが同時に実行される(ように見える)ことはありません。 スクリプトの著者は、マルチスレッドのプログラミングのように複雑な排他制御などを考える必要はありません。
showModalDialog
のようにタスクが途中で中断され、
後に再開される場合など、特殊な場合においてスクリプトが複数同時に動作するように思えることがありますが、
ある時点で処理を進められる状態にあるスクリプトは必ず1つだけです。[3] (HTML の) クライアント側スクリプトとは、 HTML 文書に添えられた、あるいは HTML 文書中に埋込まれたプログラムです。 このプログラムは文書が読込まれた時、あるいは連結が活性化された時などに、 クライアントの機械上で実行されます。
[128] HTML4 時代には、スクリプトを HTML に埋め込む方法は定義されましたが、 その具体的な処理方法は明確にされないままでした。 W3C は以後数年間にわたってこの状態を放置してきました。
[1] DynamicScripting <http://www.interq.or.jp/student/exeal/dss/> JavaScript 系, VBScript, DOM, WSH などについて。著者は mozilla.gr.jp の和訳プロジェクトに参加している人だそうです。 W3C などの仕様もちゃんと参照していますし、内容は信頼できます。
[148] HTML5 は歴史上初めてスクリプトの詳細な処理モデルを明文化しました。
更に script
要素の async
属性やワーカーなどの新機能を導入しました。
[7] Code defined for one document called after that document is no longer the one being displayed (Ian Hickson <ian@...> 著, 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/17268>
[8] IRC logs: freenode / #whatwg / 20090325 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090325>
SVG におけるスクリプト実行モデル (と HTML のスクリプト実行モデル) に関する議論です。
[61] The "initialization" steps for Web browsers ( ( 版)) <https://mail.mozilla.org/pipermail/es-discuss/2014-July/038399.html>
[62] >>2 でスクリプトのスクリプト設定群オブジェクトは環境設定群オブジェクトに改称されています。
[119] 2016年1月のモジュール導入までは、古典スクリプトがスクリプトと呼ばれていました >>117。
[121] 古典スクリプトのソーステキストは、 当時はスクリプトのコード入口点として定義されていました。
[13] スクリプトのコード入口点は、 実行可能コードのブロックを含むものとして評価されることとなる文字列、 または JavaScript関数オブジェクトのいずれかです。 >>11
[72] かつては次のように一般的に規定されていましたが、 JavaScript 以外の言語への対応は削除されました。
[73] スクリプトが他のスクリプトや利用者エージェントに晒す、 実行可能コードのブロック。一般的にはコード入口点に対応するコードはスクリプトが構文解析された直後に実行されますが、 イベントハンドラーの場合は呼び出される度に実行されます。
[74] コード入口点は、イベントハンドラーの場合関数のこともありますが、 多くの場合は文字列です。文字列を JavaScript として評価した結果、 正しい JavaScript のスクリプトであることもあれば、 構文エラーなどが含まれる場合もあります。
[19] コード入口点は、実行すると値を返したり、例外を投げたりします。 返された値は、呼び出し元で使われることがあります。 例外は、呼び出し元で適宜処理されます。
[123] モジュール導入以前は、古典スクリプトの作成と実行に相当するのはスクリプトの作成という手順でした。
[39] スクリプトの作成 >>38は、 ワーカーとイベントハンドラーを除くスクリプトを作り、実行する時に呼ばれる手順です。 次の引数があります。
[149] 2015年後半から2016年にかけて、スクリプトに関する規定の整理とモジュールの導入などの大改訂が行われています。
[70] Add promise rejection tracking events · whatwg/html@61ccc05 ( 版) <https://github.com/whatwg/html/commit/61ccc05b7437ba947390928f9e526da49550fed0>
[75] Rewrite script execution on top of ES · whatwg/html@4891d18 ( 版) <https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d>
[43] Fix importScripts() script execution · whatwg/html@704907d ( 版) <https://github.com/whatwg/html/commit/704907dc195e77759fb7b48e51932094d150b7fc>
[117] Add <script type="module"> and module resolution/fetching/evaluation · whatwg/html@cd1a9fb ( 版) <https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4>
[28] Use "credentials mode" instead of "CORS setting" for modules · whatwg/html@7a0ce07 ( 版) <https://github.com/whatwg/html/commit/7a0ce073a8fbade8f44d0e2d4c709ad7cf3ee312>
[29] Add module workers · whatwg/html@e3a5bb7 ( 版) <https://github.com/whatwg/html/commit/e3a5bb757f64374c37d8c4528c01298463ef0b2a>
[51] Fix #715: clarify how aborting a running script works · whatwg/html@6a48bfb ( 版) <https://github.com/whatwg/html/commit/6a48bfbf1066034eab4786d62ba4017593c48430>
[166] Clarify settings object, realm, and global relationships · whatwg/html@0866f1b ( 版) <https://github.com/whatwg/html/commit/0866f1b3f4b4ea5a99a30909e9bbe557dea0b460>
[167] Pass cryptographic nonce metadata to Fetch · whatwg/html@5479e07 ( 版) <https://github.com/whatwg/html/commit/5479e07a6f6e01062b85b5fe6799752b0370336c>
[145] Detail how javascript: return values become response bodies · whatwg/html@9997cd9 ( 版) <https://github.com/whatwg/html/commit/9997cd93c65a9f4a640a593c02f01c2c58924457>
[168] Should we be doing prepare to run a script/clean up after running a script more often? · Issue #855 · whatwg/html () <https://github.com/whatwg/html/issues/855>
[169] Editorial: fix typo in running a module script (domenic著, ) <https://github.com/whatwg/html/commit/4b9a96849c4a9a78c8cae9febe5eeb08182ce7e0>
[170] Convert custom element callbacks to Web IDL callback types (domenic著, ) <https://github.com/whatwg/html/commit/be055730a11a8f952feb8fdb73e7caa01460e5a4>
[171] Handle reentrant custom element definition (domenic著, ) <https://github.com/whatwg/html/commit/270b5f3e48411063c431fdf98dbe41766ddc20b1>
[172] Add a new section detailing the various potential realms (domenic著, ) <https://github.com/whatwg/html/commit/6399af334edd6000bd394685923df5f0519194ab>
[22] Fix some callers of "create a module script" (domenic著, ) <https://github.com/whatwg/html/commit/73af7511ab638a4fcb7a1db908ea746ad808344a>
[35] Fix error cases of <script type=module> (domenic著, ) <https://github.com/whatwg/html/commit/115763124a641e8814665c5014d28155f95ff441>
[36] Improve module instantiation/evaluation, especially around errors (domenic著, ) <https://github.com/whatwg/html/commit/2b408b65a11fe76b6588b744e0ae74d30ff29b43>
[45] Improve module instantiation/evaluation, especially around errors (domenic著, ) <https://github.com/whatwg/html/commit/2b408b65a11fe76b6588b744e0ae74d30ff29b43>
[56] Editorial: refactor classic and module scripts to be more alike (domenic著, ) <https://github.com/whatwg/html/commit/dce999aac4d9deeefa3b338dd2aeb30c17669bc8>
[81] Editorial: refactor classic and module scripts to be more alike by domenic · Pull Request #2972 · whatwg/html () <https://github.com/whatwg/html/pull/2972>
[82] Editorial: move base URL from "module script" to "script" (domenic著, ) <https://github.com/whatwg/html/commit/5458513792ab00d58e6c91ba48faaa611d034a2e>
[84] Editorial: move base URL from "module script" to "script" (domenic著, ) <https://github.com/whatwg/html/commit/5458513792ab00d58e6c91ba48faaa611d034a2e>
[85] Make integrity="" work on module scripts (domenic著, ) <https://github.com/whatwg/html/commit/9275d955dcd604e959cfcc672e0c234b1b8c00db>
[90] Does integrity="" intentionally not work on module <script>s? · Issue #2382 · whatwg/html () <https://github.com/whatwg/html/issues/2382>
[91] Does integrity="" intentionally not work on module <script>s? · Issue #2382 · whatwg/html () <https://github.com/whatwg/html/issues/2382>
[92] Fix module script error handling, again (domenic著, ) <https://github.com/whatwg/html/commit/165101a955652f715e551917c80ab8140429978f>
[93] Fix module script error handling, again by domenic · Pull Request #2991 · whatwg/html () <https://github.com/whatwg/html/pull/2991>
[95] Do not remember module instantiation errors. by GeorgNeis · Pull Request #1006 · tc39/ecma262 () <https://github.com/tc39/ecma262/pull/1006>
[96] Opera 50 Beta RC with Cryptocurrency Mining Protection - Opera Desktop () <https://blogs.opera.com/desktop/2017/12/opera-50-beta-rc-cryptocurrency-mining-protection/>
[97] Initialize script's base URL earlier (TimothyGu著, ) <https://github.com/whatwg/html/commit/34ca9e5dcaaba10b22553d3235aaf7eca919d7ab>
[86] Initialize script's base URL earlier by TimothyGu · Pull Request #3352 · whatwg/html () <https://github.com/whatwg/html/pull/3352>
<script type>
も参照。