[2] [DFN[[RUBYB[[[スクリプトが有効]]]@en[scripting is enabled]]]]、[DFN[[RUBYB[[[スクリプトが無効]]]@en[scripting is disabled]]]]とは、 [[スクリプト]]の実行の可否を指します。また[[HTML構文解析器]]には[DFN[[RUBYB[[[スクリプトフラグ]]]@en[scripting flag]]]]があります。 * 仕様書 [REFS[ - [1] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-12-19 00:10:55 +09:00]] 版) - [8] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-12-19 00:10:55 +09:00]] 版) ]REFS] * 閲覧文脈と節点のスクリプト有効性 [3] [[閲覧文脈]]については、次の条件がすべて満たされた時[[スクリプトが有効]]となり、 そうでないとき[[スクリプトが無効]]となります [SRC[>>1]]。 [FIG[ - [4] [[利用者エージェント]]が[[スクリプト]]に対応している - [5] [[利用者]]がその時点で当該[[閲覧文脈]]について[[スクリプト]]を無効にしていない - [6] [[閲覧文脈]]の[[活性文書]]の[[活性砂箱化フラグ集合]]において[[砂箱化スクリプト閲覧文脈フラグ]]が設定されていない ]FIG] ;; [10] [[砂箱化スクリプト閲覧文脈フラグ]]は [CODE(HTMLe)@en[[[iframe]]]] [[要素]]の [CODE(HTMLa)@en[[[sandbox]]]] [[属性]]や [[CSP]] の [CODE(HTTP)@en[[[sandbox]]]] [[指令]]によって設定できます。 ;; [16] [[XHR]] や [CODE(JS)@en[[[new]] [[Document]]]] や [CODE(DOMm)@en[[[createDocument]]]] で作った[[文書]]は[[閲覧文脈]]を持たないので、 従って[[スクリプトが無効]]な状態となります。 ;; [20] [CODE(HTMLe)@en[[[template]]]] [[要素]]の中身は[[雛形内容]]に属しますが、 [[雛形内容]]の[[節点文書]]は外側の[[文書]]とは別の[[閲覧文脈]]に属さない[[文書]]なので、 [[スクリプトが無効]]となります。 ;; [21] [CODE(HTMLa)@en[[[contenteditable]]]] や [CODE(DOMa)@en[[[designMode]]]] は[[スクリプトが有効]]か否かとは無関係です。 [7] [[節点]]については、[[節点文書]]が関連付けられた[[閲覧文脈]]を持ち、 その[[閲覧文脈]]について[[スクリプトが有効]]であるなら[[スクリプトが有効]]であり、 そのような[[閲覧文脈]]がないか、[[閲覧文脈]]で[[スクリプトが無効]]なら、[[スクリプトが無効]]です [SRC[>>1]]。 [13] スクリプトの有効性は次の場面に影響します。 [FIG[ - [[スクリプト]]の作成 -- 無効なら、 [CODE(HTMLe)@en[[[script]]]] [[要素]]による[[スクリプト]]の処理はされません -- 有効なら、 [[create a script]] で[[スクリプト]]が実行されます -- 有効なら、[[イベントハンドラー内容属性]]が設定された時に実際に[[イベントハンドラー]]として設定されます - [[スクリプト]]の実行 -- 有効なら、 [[prepare to run a callback]] で実行と判断されます。 - [[fetch]] -- [CODE(HTMLe)@en[[[img]]]] [[要素]]の [CODE(HTMLa)@en[[[src]]]] [[属性]]が設定された時、有効なら直ちに画像の取得が開始されますが、無効なら必要になるまで遅延できます - [[レンダリング]] -- 有効なら [CODE(HTMLe)@en[[[noscript]]]] はなにも[[表現]]せず、無効なら[[子供]]を[[表現]]します -- 有効なら [CODE(HTMLe)@en[[[noscript]]]] [[要素]]は [CODE(CSS)@en[[[display]]: [[none]]]] となります -- [CODE(HTMLe)@en[[[canvas]]]] [[要素]]が[[埋め込み内容]]を[[表現]]するか[[フォールバック内容]]を[[表現]]するかの決定に関与します -- 無効なら、[[媒体要素]]に [CODE(HTMLa)@en[[[controls]]]] [[属性]]がなくても[[利用者に利用者インターフェイスを晒す]]べきです - [[構文解析]]と[[直列化]] -- [[スクリプトフラグ]] (>>9) に影響します -- [CODE(HTMLe)@en[[[noscript]]]] [[要素]]の[[直列化]]の方法に影響します - [[適合性]] -- [CODE(HTMLe)@en[[[noscript]]]] の[[内容モデル]]は有効か否かにより変更します ]FIG] ;; [18] [[スクリプト]]が定義された時と[[コールバック]]として実行される時の両方にチェックが入っているので、 定義と実行の間に[[スクリプトが無効]]に変化しても[[スクリプト]]は実行されません。 [REFS[ - [19] [CITE@en[Bug 20578 – Need to define the interaction of "scripting is disabled/enabled" with script execution in various cases]] ([TIME[2014-01-02 12:10:44 +09:00]] 版) ]REFS] * 構文解析器のスクリプトフラグ [9] [[HTML構文解析器]]が作られた時点において[[構文解析器]]と関連付けられた[[文書節点]]の[[スクリプトが有効]]なら、 [[構文解析器]]の[[スクリプトフラグ]]が「有効」に設定されます。そうでなければ「無効」に設定されます。 [SRC[>>8]] ;; [11] [[閲覧文脈]]や[[節点]]のスクリプトの有効性は動的に変更されることがありますが、 [[構文解析器]]の[[スクリプトフラグ]]は一度設定されたら変更されません。 ですから、[CODE(HTMLe)@en[[[noscript]]]] [[要素]]の中身が構文解析された[[文書]]で[[スクリプト]]が実行されることもあり得ます。 構文解析してから直列化するまでに[[スクリプトが有効]]かどうかが変化すると、 [CODE(HTMLe)@en[[[noscript]]]] [[要素]]の中身が元の状態に戻らない (再度[[構文解析]]したら違う [[DOM]] になる) 可能性もあります。 ;; [12] このフラグは [[HTML構文解析器]]には存在しますが、 [[XML構文解析器]]には存在しません。 [[スクリプト]]の実行自体は[[閲覧文脈]]の[[スクリプトが有効]]かどうかにより制御されます。 [15] [[スクリプトフラグ]]は次の場面に影響します。 [FIG[ - [[HTML文書]]の構文解析における [CODE(HTMLe)@en[[[noscript]]]] [[開始タグ]]、[[終了タグ]]の処理 - [CODE(HTMLe)@en[[[noscript]]]] [[要素]]を[[文脈]]とした[[HTML素片構文解析アルゴリズム]]の処理 ]FIG] ;; [17] [CODE(HTMLe)@en[[[noscript]]]] [[要素]]の中身は、有効なら[[終了タグ]]まですべて[[テキスト]]とみなされ、 無効なら通常の[[要素]]の[[内容]]として解釈されます。 * 関連 [14] [CODE(DOMa)@en[[[innerHTML]]]] や [CODE(DOMi)@en[[[XSLTProcessor]]]] や、一旦実行された [CODE(HTMLe)@en[[[script]]]] [[要素]]では[[スクリプト]]が実行されませんが、これは [["already-started" flag]] によって処理されるので、[[スクリプトが有効]]か否かとは別です。