1. 8 ウェブアプリケーションAPI
    1. 8.1 スクリプティング
      1. 8.1.1 導入
      2. 8.1.2 エージェントおよびエージェントクラスター
        1. 8.1.2.1 JavaScriptエージェント形式化との統合
        2. 8.1.2.2 JavaScriptエージェントクラスター形式化との統合
      3. 8.1.3 スクリプト処理モデル
        1. 8.1.3.1 ランタイムスクリプトエラー
        2. 8.1.3.2 未処理のプロミス拒否
        3. 8.1.3.3 Job-related host hooks
          1. 8.1.3.3.1 HostCallJobCallback(callback, V, argumentsList)
          2. 8.1.3.3.2 HostEnqueueFinalizationRegistryCleanupJob(finalizationRegistry)
          3. 8.1.3.3.3 HostEnqueuePromiseJob(job, realm)
          4. 8.1.3.3.4 HostMakeJobCallback(callable)
        4. 8.1.3.4 Module-related host hooks
      4. 8.1.4 イベントループ
      5. 8.1.5 イベント
        1. 8.1.5.1 イベントハンドラー
        2. 8.1.5.2 要素のイベントハンドラー、Documentオブジェクト、およびWindowオブジェクト
    2. 8.2 WindowOrWorkerGlobalScopeミックスイン
    3. 8.3 Base64ユーティリティメソッド

8 ウェブアプリケーションAPI

8.1 スクリプティング

8.1.1 導入

様々なメカニズムが文書のコンテキストで実行するよう著者が提供する実行可能コードを引き起こすかもしれない。これらのメカニズムは以下を含むが、おそらく以下に限定されない:

8.1.2 エージェントおよびエージェントクラスター

8.1.2.1 JavaScriptエージェント形式化との統合

JavaScriptは、エージェントの概念を定義する。この節は、その言語レベルの概念をウェブプラットフォームにマッピングする。

概念上、エージェントの概念は、JavaScriptコードが実行される、アーキテクチャに依存しない理想的な"スレッド"である。そのようなコードには、互いに同期的にアクセスできる複数のグローバル/レルムが含まれる可能性があるため、単一の実行スレッドで実行する必要がある。

次の種類のエージェントがウェブプラットフォームに存在する:

類似の生成元ウィンドウエージェント

直接、またはdocument.domainのいずれかを使用して、互いに到達する可能性のある様々なWindowオブジェクトを含む。

If the encompassing agent cluster's is origin-keyed is true, then all the Window objects will be same origin, can reach each other directly, and document.domain will no-op.

同一生成元である2つの Windowオブジェクトは、それぞれが独自のブラウジングコンテキストグループ内にある場合など、異なる類似の生成元ウィンドウエージェント内に存在できる。

専用ワーカーエージェント

単一のDedicatedWorkerGlobalScopeを含む。

共有ワーカーエージェント

単一のSharedWorkerGlobalScopeを含む。

サービスワーカーエージェント

単一のServiceWorkerGlobalScopeを含む。

ワークレットエージェント

単一のWorkletGlobalScopeオブジェクトを含む。

特定のワークレットは複数のレルムを設定できるが、各レルムは他のレルムとは独立して同時にコードを実行できるため、そのような各レルムには独自のエージェントが必要である。

共有および専用ワーカーエージェントのみが、JavaScript Atomics APIの使用を潜在的にブロックすることを可能にする。

8.1.2.2 JavaScriptエージェントクラスター形式化との統合

JavaScriptはエージェントクラスターの概念も定義する。この標準は、作成時にエージェントを適切に配置することにより、ウェブプラットフォームにマッピングする。

エージェントクラスターの概念は、JavaScriptメモリーモデルを定義するために重要であり、特にどのエージェント間でSharedArrayBufferオブジェクトのバッキングデータを共有できるかが重要である。

概念上、エージェントクラスターの概念は、複数の"スレッド"(エージェント)をグループ化する、アーキテクチャに依存しない、理想的な"プロセス境界"である。仕様で定義されるエージェントクラスターは、一般に、ユーザーエージェントに実装される実際のプロセス境界よりも制限的である。これらの理想的な分割を仕様レベルで強制することにより、ユーザーエージェントのプロセスモデルが変化、変更しても、ウェブ開発者は共有メモリーに関して相互運用可能な動作を確認することを保証する。

次のグローバルオブジェクトのペアは、それぞれ同じエージェントクラスター内にあるため、SharedArrayBufferインスタンスを使用して互いにメモリーを共有できる:

次のグローバルオブジェクトのペアは、同じエージェントクラスター内には存在しないため、メモリーを共有することはできない:

8.1.3 スクリプト処理モデル

8.1.3.1 ランタイムスクリプトエラー

さまざまなシナリオで、ユーザーエージェントはWindowerrorイベントを発火させることによって例外を報告できる。 このイベントがキャンセルされない場合、エラーは処理されていないと見なされ、開発者コンソールに報告できる。

8.1.3.2 未処理のプロミス拒否

Window/rejectionhandled_event

Support in all current engines.

Firefox69+Safari11+Chrome49+
Opera36+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android🔰 68+Safari iOS11.3+Chrome Android49+WebView Android49+Samsung Internet5.0+Opera Android36+

同期ランタイムスクリプトエラーに加えて、スクリプトは非同期のプロミス拒否を経験してもよく、unhandledrejectionおよびrejectionhandledイベントで追跡される。

8.1.3.3 Job-related host hooks

Reference/Global_Objects/Promise#Incumbent_settings_object_tracking

Support in one engine only.

Firefox50+SafariNoChromeNo
OperaNoEdgeNo
Edge (Legacy)NoInternet ExplorerNo
Firefox Android50+Safari iOSNoChrome AndroidNoWebView AndroidNoSamsung InternetNoOpera AndroidNo

The JavaScript specification defines Jobs to be scheduled and run later by the host, as well as JobCallback Records which encapsulate JavaScript functions that are called as part of jobs. The JavaScript specification contains a number of implementation-defined abstract operations that lets the host define how jobs are scheduled and how JobCallbacks are handled. HTML uses these abstract operations to track the incumbent settings object in promises and FinalizationRegistry callbacks by saving and restoring the incumbent settings object and a JavaScript execution context for the active script in JobCallbacks. This section defines them for user agent hosts.

8.1.3.3.1 HostCallJobCallback(callback, V, argumentsList)

JavaScript contains an implementation-defined HostCallJobCallback(callback, V, argumentsList) abstract operation to let hosts restore state when invoking JavaScript callbacks from inside tasks. User agents must use the following implementation: [JAVASCRIPT]

  1. Let incumbent settings be callback.[[HostDefined]].[[IncumbentSettings]].

  2. Let script execution context be callback.[[HostDefined]].[[ActiveScriptContext]].

  3. Prepare to run a callback with incumbent settings.

    This affects the incumbent concept while the callback runs.

  4. If script execution context is not null, then push script execution context onto the JavaScript execution context stack.

    This affects the active script while the callback runs.

  5. Let result be Call(callback.[[Callback]], V, argumentsList).

  6. If script execution context is not null, then pop script execution context from the JavaScript execution context stack.

  7. Clean up after running a callback with incumbent settings.

  8. Return result.

8.1.3.3.2 HostEnqueueFinalizationRegistryCleanupJob(finalizationRegistry)

JavaScript has the ability to register objects with FinalizationRegistry objects, in order to schedule a cleanup action if they are found to be garbage collected. The JavaScript specification contains an implementation-defined HostEnqueueFinalizationRegistryCleanupJob(finalizationRegistry) abstract operation to schedule the cleanup action.

The timing and occurrence of cleanup work is implementation-defined in the JavaScript specification. User agents might differ in when and whether an object is garbage collected, affecting both whether the return value of the WeakRef.prototype.deref() method is undefined, and whether FinalizationRegistry cleanup callbacks occur. There are well-known cases in popular web browsers where objects are not accessible to JavaScript, but they remain retained by the garbage collector indefinitely. HTML clears kept-alive WeakRef objects in the perform a microtask checkpoint algorithm. Authors would be best off not depending on the timing details of garbage collection implementations.

Cleanup actions do not take place interspersed with synchronous JavaScript execution, but rather happen in queued tasks. User agents must use the following implementation: [JAVASCRIPT]

  1. Let global be finalizationRegistry.[[Realm]]'s global object.

  2. Queue a global task on the JavaScript engine task source given global to perform the following steps:

    1. Let entry be finalizationRegistry.[[CleanupCallback]].[[Callback]].[[Realm]]'s environment settings object.

    2. Check if we can run script with entry. If this returns "do not run", then return.

    3. Prepare to run script with entry.

      This affects the entry concept while the cleanup callback runs.

    4. Let result be the result of performing CleanupFinalizationRegistry(finalizationRegistry).

    5. Clean up after running script with entry.

    6. If result is an abrupt completion, then report the exception given by result.[[Value]].

8.1.3.3.3 HostEnqueuePromiseJob(job, realm)

JavaScript contains an implementation-defined HostEnqueuePromiseJob(job, realm) abstract operation to schedule Promise-related operations. HTML schedules these operations in the microtask queue. User agents must use the following implementation: [JAVASCRIPT]

  1. If realm is not null, then let job settings be the settings object for realm. Otherwise, let job settings be null.

    If realm is not null, it is the Realm of the author code that will run. When job is returned by NewPromiseReactionJob, it is the realm of the promise's handler function. When job is returned by NewPromiseResolveThenableJob, it is the realm of the then function.

    If realm is null, either no author code will run or author code is guaranteed to throw. For the former, the author may not have passed in code to run, such as in promise.then(null, null). For the latter, it is because a revoked Proxy was passed. In both cases, all the steps below that would otherwise use job settings get skipped.

  2. Queue a microtask on the surrounding agent's event loop to perform the following steps:

    1. If job settings is not null, then check if we can run script with job settings. If this returns "do not run" then return.

    2. If job settings is not null, then prepare to run script with job settings.

      This affects the entry concept while the job runs.

    3. Let result be job().

      job is an abstract closure returned by NewPromiseReactionJob or NewPromiseResolveThenableJob. The promise's handler function when job is returned by NewPromiseReactionJob, and the then function when job is returned by NewPromiseResolveThenableJob, are wrapped in JobCallback Records. HTML saves the incumbent settings object and a JavaScript execution context for to the active script in HostMakeJobCallback and restores them in HostCallJobCallback.

    4. If job settings is not null, then clean up after running script with job settings.

    5. If result is an abrupt completion, then report the exception given by result.[[Value]].

8.1.3.3.4 HostMakeJobCallback(callable)

JavaScript contains an implementation-defined HostMakeJobCallback(callable) abstract operation to let hosts attach state to JavaScript callbacks that are called from inside tasks. User agents must use the following implementation: [JAVASCRIPT]

  1. Let incumbent settings be the incumbent settings object.

  2. Let active script be the active script.

  3. Let script execution context be null.

  4. If active script is not null, set script execution context to a new JavaScript execution context, with its Function field set to null, its Realm field set to active script's settings object's Realm, and its ScriptOrModule set to active script's record.

    As seen below, this is used in order to propagate the current active script forward to the time when the job callback is invoked.

    A case where active script is non-null, and saving it in this way is useful, is the following:

    Promise.resolve('import(`./example.mjs`)').then(eval);

    Without this step (and the steps that use it in HostCallJobCallback), there would be no active script when the import() expression is evaluated, since eval() is a built-in function that does not originate from any particular script.

    With this step in place, the active script is propagated from the above code into the job, allowing import() to use the original script's base URL appropriately.

    active script can be null if the user clicks on the following button:

    <button onclick="Promise.resolve('import(`./example.mjs`)').then(eval)">Click me</button>

    In this case, the JavaScript function for the event handler will be created by the get the current value of the event handler algorithm, which creates a function with null [[ScriptOrModule]] value. Thus, when the promise machinery calls HostMakeJobCallback, there will be no active script to pass along.

    As a consequence, this means that when the import() expression is evaluated, there will still be no active script. Fortunately that is handled by our implementations of HostResolveImportedModule and HostImportModuleDynamically, by falling back to using the current settings object's API base URL.

  5. Return the JobCallback Record { [[Callback]]: callable, [[HostDefined]]: { [[IncumbentSettings]]: incumbent settings, [[ActiveScriptContext]]: script execution context } }.

8.1.3.4 Module-related host hooks

JavaScript仕様では、モジュールの構文と、その処理モデルのホストに依存しない部分を定義する。この仕様は、残りの処理モデルを定義する:type属性が"module"に設定されたscript要素を介して、モジュールがどのようにフェッチされ、解決され、実行されるか。[JAVASCRIPT]

JavaScript仕様は"スクリプト"対"モジュール"の観点から話すが、どちらもscript要素を使用しているため、一般にこの仕様はクラシックスクリプトモジュールスクリプトの観点から話す。

modulePromise = import(specifier)

指定子によって識別されるモジュールスクリプトのモジュール名前空間オブジェクトのプロミスを返す。これは、importステートメントフォームを静的に使用する代わりに、実行時にモジュールスクリプトを動的にインポートを可能にする。指定子は、アクティブスクリプトベースURLを基準にして解決される

不正な指定子が指定された場合、または結果のモジュールグラフのフェッチまたは評価中に失敗が発生した場合、返されたプロミスは拒否される。

この構文は、クラシックスクリプトモジュールスクリプトの両方で使用できる。よって、クラシックスクリプトの世界からモジュールスクリプトの世界への架け橋となる。

url = import . meta . url

アクティブモジュールスクリプトベースURLを返す。

この構文は、モジュールスクリプト内でのみ使用できる。

モジュールマップは、インポートされたJavaScriptモジュールがDocumentまたはワーカーごとに1回だけフェッチ、解析、および評価されることを保証するために使用される。

モジュールマップはURLによって入力されるため、次のコードは3つの異なるURLをもたらすため、モジュールマップに3つの個別エントリーを作成する:

import "https://example.com/module.mjs";
import "https://example.com/module.mjs#map-buster";
import "https://example.com/module.mjs?debug=true";

つまり、URLクエリーおよびフラグメントは、を変更して、モジュールマップに個別のエントリーを作成するために変化させることができ、それらは無視されない。よって、3つの別々のフェッチおよび3つの別々のモジュール評価が実行される。

対照的に、次のコードは、モジュールマップに単一のエントリーのみを作成する。これは、これらの入力にURLパーサーを適用した後、結果のURLレコードが等しくなるためである。

import "https://example.com/module2.mjs";
import "https:example.com/module2.mjs";
import "https://///example.com\\module2.mjs";
import "https://example.com/foo/../module2.mjs";

そのため、この2番目の例では、1つのフェッチと1つのモジュール評価のみが発生する。

この動作は、共有ワーカーが解析されたコンストラクターURLによって入力される方法と同じであることに注意する。

以下は妥当なモジュール指定子である:

以下は、上記のアルゴリズムに従った妥当なモジュール指定子であるが、フェッチされると必ず失敗する。

以下は、上記のアルゴリズムによれば妥当なモジュール指定子ではない:

8.1.4 イベントループ

イベント、ユーザーインタラクション、スクリプト、レンダリング、ネットワーキングなどを調整するために、ユーザーエージェントは、この節で説明するイベントループを使用しなければならない。各エージェントには、イベントループが関連付けられており、これはそのエージェントに特有である。

類似の生成元ウィンドウエージェントイベントループは、ウィンドウイベントループとして知られる。 専用ワーカーエージェント共有ワーカーエージェント、またはサービスワーカーエージェントイベントループは、ワーカーイベントループとして知られる。そして、ワークレットエージェントイベントループは、ワークレットイベントループとして知られる。

イベントループは必ずしも実装スレッドに対応しているとは限らない。たとえば、複数のウィンドウイベントループを1つのスレッドで協調的にスケジュールできる。

しかし、[[CanBlock]]をtrueに設定して割り当てられたさまざまなワーカーエージェントの場合、JavaScript仕様は、フォワードプログレスに関する要件を設定し、これは、これらのケースでエージェントごとの専用スレッドを要求することになる。

8.1.5 イベント

8.1.5.1 イベントハンドラー

Events/Event_handlers

多くのオブジェクトは、指定したイベントハンドラーを持つことができる。これは、指定されたオブジェクトの非キャプチャイベントリスナーとして機能する。[DOM]

イベントハンドラーは2つの方法で公開される。

1つ目の方法は、すべてのイベントハンドラーに共通する、イベントハンドラーIDL属性としてである。

2つ目の方法は、イベントハンドラーコンテンツ属性としてである。HTML要素のイベントハンドラーおよびWindowオブジェクトのイベントハンドラーの一部は、この方法で公開される。

これら2つの方法の両方で、イベントハンドラー名前を通して公開される。名前は、常に"on"で始まり、その後にハンドラーの対象となるイベントの名前が続く文字列である。


ほとんどの場合、イベントハンドラーを公開するオブジェクトは、対応するイベントリスナーが追加されるオブジェクトと同じである。しかし、body要素およびframeset要素は、要素のWindowオブジェクト(存在する場合)に作用するいくつかのイベントハンドラーを公開する。いずれの場合も、イベントハンドラーがそのイベントハンドラーターゲットに作用するオブジェクトを呼び出す。


イベントハンドラーIDL属性は、特定のイベントハンドラーに対するIDL属性である。IDL属性の名前は、イベントハンドラー名前と同じである。


イベントハンドラーコンテンツ属性は、特定のイベントハンドラーに対するコンテンツ属性である。コンテンツ属性の名前は、イベントハンドラー名前と同じである。

イベントハンドラーコンテンツ属性が指定される場合、解析されるときに、自動セミコロン挿入後のFunctionBody生成物と一致する、妥当なJavaScriptコードを含まなければならない。

この例は、イベントリスナーが呼び出される順序を示す。この例でボタンがユーザーによってクリックされる場合、ページはそれぞれテキスト"ONE"、"TWO"、"THREE"、"FOUR"をもつ4つの警告を表示する。

<button id="test">Start Demo</button>
<script>
 var button = document.getElementById('test');
 button.addEventListener('click', function () { alert('ONE') }, false);
 button.setAttribute('onclick', "alert('NOT CALLED')"); // event handler listener is registered here
 button.addEventListener('click', function () { alert('THREE') }, false);
 button.onclick = function () { alert('TWO'); };
 button.addEventListener('click', function () { alert('FOUR') }, false);
</script>

しかし、次の例では、イベントハンドラーは、最初のアクティブ化の後(およびイベントリスナーが削除された後)、後で再アクティブにされる前に非アクティブにされる。このページには、"ONE"、"TWO"、"THREE"、"FOUR"、"FIVE"の順に5つのアラートが表示される。

<button id="test">Start Demo</button>
<script>
 var button = document.getElementById('test');
 button.addEventListener('click', function () { alert('ONE') }, false);
 button.setAttribute('onclick', "alert('NOT CALLED')"); // event handler is activated here
 button.addEventListener('click', function () { alert('TWO') }, false);
 button.onclick = null;                                 // but deactivated here
 button.addEventListener('click', function () { alert('THREE') }, false);
 button.onclick = function () { alert('FOUR'); };       // and re-activated here
 button.addEventListener('click', function () { alert('FIVE') }, false);
</script>

EventHandlerコールバック関数型は、イベントハンドラーに対して使用されるコールバックを表す。

JavaScriptにおいて、すべてのFunctionオブジェクトがこのインターフェイスを実装する。

たとえば、次の文書断片で:

<body onload="alert(this)" onclick="alert(this)">

文書がロードされるときに"[object Window]"という警告を、ページでユーザーが何かをクリックするときはいつでも"[object HTMLBodyElement]"という警告を流す。

関数の戻り値は、イベントがキャンセルされるかどうかに影響する。戻り値がfalseの場合、イベントはキャンセルされる。

プラットフォームには、歴史的な理由から2つの例外がある:

歴史的な理由により、onerrorハンドラーは、異なる引数を持つ。

window.onerror = (message, source, lineno, colno, error) => {};

同様に、onbeforeunloadハンドラーには異なる戻り値がある。文字列にキャストされる

8.1.5.2 要素のイベントハンドラー、Documentオブジェクト、およびWindowオブジェクト

以下は、イベントハンドラーコンテンツ属性イベントハンドラーIDL属性の両方として、すべてのHTML要素でサポートされるイベントハンドラー(およびそれに対応するイベントハンドラーイベント型)である。イベントハンドラーIDL属性として、すべてのDocumentおよびWindowオブジェクトでサポートされる:

イベントハンドラーイベントハンドラーイベント型
onabort

GlobalEventHandlers/onabort

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
abort
onauxclickauxclick
oncancel

GlobalEventHandlers/oncancel

Support in one engine only.

FirefoxNoSafariNoChrome32+
Opera19+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox AndroidNoSafari iOSNoChrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
cancel
oncanplay

GlobalEventHandlers/oncanplay

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
canplay
oncanplaythrough

GlobalEventHandlers/oncanplaythrough

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
canplaythrough
onchange

GlobalEventHandlers/onchange

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android4+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android10.1+
change
onclick

GlobalEventHandlers/onclick

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android4+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android10.1+
click
onclose

GlobalEventHandlers/onclose

Firefox53+SafariNoChrome32+
Opera19+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android53+Safari iOSNoChrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
close
oncontextmenu

GlobalEventHandlers/oncontextmenu

Support in all current engines.

Firefox9+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5+
Firefox Android9+Safari iOS3.2+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android12.1+
contextmenu
oncuechange

GlobalEventHandlers/oncuechange

Support in all current engines.

Firefox68+Safari10.1+Chrome32+
Opera19+Edge79+
Edge (Legacy)18Internet ExplorerNo
Firefox Android68+Safari iOS10.3+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
cuechange
ondblclick

GlobalEventHandlers/ondblclick

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
dblclick
ondragdrag
ondragenddragend
ondragenterdragenter
ondragleavedragleave
ondragoverdragover
ondragstartdragstart
ondropdrop
ondurationchange

GlobalEventHandlers/ondurationchange

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
durationchange
onemptied

GlobalEventHandlers/onemptied

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
emptied
onended

GlobalEventHandlers/onended

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
ended
onformdata

GlobalEventHandlers/onformdata

Firefox72+SafariNoChrome77+
Opera64+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android79+Safari iOSNoChrome Android77+WebView Android77+Samsung Internet12.0+Opera Android55+
formdata
oninput

GlobalEventHandlers/oninput

Support in all current engines.

Firefox9+Safari4+Chrome1+
Opera10+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS3.2+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android10.1+
input
oninvalid

GlobalEventHandlers/oninvalid

Support in all current engines.

Firefox9+Safari5+Chrome4+
Opera12.1+Edge79+
Edge (Legacy)13+Internet ExplorerNo
Firefox Android9+Safari iOS4+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android12.1+
invalid
onkeydown

GlobalEventHandlers/onkeydown

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
keydown
onkeypresskeypress
onkeyup

GlobalEventHandlers/onkeyup

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
keyup
onloadeddata

GlobalEventHandlers/onloadeddata

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
loadeddata
onloadedmetadata

GlobalEventHandlers/onloadedmetadata

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
loadedmetadata
onloadstart

GlobalEventHandlers/onloadstart

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
loadstart
onmousedown

GlobalEventHandlers/onmousedown

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
mousedown
onmouseenter

GlobalEventHandlers/onmouseenter

Support in all current engines.

Firefox10+Safari6.1+Chrome30+
Opera17+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android10+Safari iOS7+Chrome Android30+WebView Android4.4+Samsung Internet2.0+Opera Android18+
mouseenter
onmouseleave

GlobalEventHandlers/onmouseleave

Support in all current engines.

Firefox10+Safari6.1+Chrome30+
Opera17+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android10+Safari iOS7+Chrome Android30+WebView Android4.4+Samsung Internet2.0+Opera Android18+
mouseleave
onmousemove

GlobalEventHandlers/onmousemove

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
mousemove
onmouseout

GlobalEventHandlers/onmouseout

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
mouseout
onmouseover

GlobalEventHandlers/onmouseover

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
mouseover
onmouseup

GlobalEventHandlers/onmouseup

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
mouseup
onpause

GlobalEventHandlers/onpause

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
pause
onplay

GlobalEventHandlers/onplay

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
play
onplaying

GlobalEventHandlers/onplaying

Support in all current engines.

Firefox9+Safari9+Chrome32+
Opera19+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS9+Chrome Android32+WebView Android4.4.3+Samsung Internet2.0+Opera Android19+
playing
onprogressprogress
onratechangeratechange
onreset

GlobalEventHandlers/onreset

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
reset
onsecuritypolicyviolationsecuritypolicyviolation
onseekedseeked
onseekingseeking
onselect

GlobalEventHandlers/onselect

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
select
onslotchangeslotchange
onstalledstalled
onsubmit

GlobalEventHandlers/onsubmit

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
submit
onsuspendsuspend
ontimeupdatetimeupdate
ontoggletoggle
onvolumechangevolumechange
onwaitingwaiting
onwebkitanimationendwebkitAnimationEnd
onwebkitanimationiterationwebkitAnimationIteration
onwebkitanimationstartwebkitAnimationStart
onwebkittransitionendwebkitTransitionEnd
onwheel

GlobalEventHandlers/onwheel

Support in all current engines.

Firefox17+Safari7+Chrome31+
Opera18+Edge79+
Edge (Legacy)12+Internet ExplorerNo
Firefox Android17+Safari iOS7+Chrome Android31+WebView Android4.4.3+Samsung Internet2.0+Opera Android18+
wheel

以下は、bodyおよびframeset要素以外のすべてのHTML要素イベントハンドラーコンテンツ属性イベントハンドラーIDL属性の両方としてサポートされるイベントハンドラー(およびそれに対応するイベントハンドラーイベント型)である。イベントハンドラーIDL属性として、すべてのDocumentオブジェクトでサポートされる。Windowオブジェクト自身でイベントハンドラーIDL属性として、すべてのWindowオブジェクトでサポートされる。対応するイベントハンドラーコンテンツ属性イベントハンドラーIDL属性が、そのWindowオブジェクトの関連付けられたDocumentが所有するすべてのbodyおよびframeset要素で公開される:

イベントハンドラーイベントハンドラーイベント型
onblur

GlobalEventHandlers/onblur

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
blur
onerror

GlobalEventHandlers/onerror

Support in all current engines.

Firefox1+Safari6+Chrome10+
Opera11.6+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android4+Safari iOS6+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android12+

HTMLMediaElement/onerror

Support in all current engines.

Firefox3.5+Safari1.3+ChromeYes
OperaYesEdgeYes
Edge (Legacy)12+Internet Explorer9+
Firefox Android4+Safari iOS1+Chrome AndroidYesWebView AndroidYesSamsung InternetYesOpera AndroidYes
error
onfocus

GlobalEventHandlers/onfocus

Support in all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
focus
onload

GlobalEventHandlers/onload

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android4+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android10.1+
load
onresize

GlobalEventHandlers/onresize

Support in all current engines.

Firefox38+Safari10.1+Chrome34+
Opera21+Edge79+
Edge (Legacy)NoInternet Explorer🔰 4+
Firefox Android38+Safari iOS10.3+Chrome Android34+WebView Android37+Samsung Internet2.0+Opera Android21+
resize
onscroll

GlobalEventHandlers/onscroll

Support in all current engines.

Firefox9+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android9+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
scroll

この表の最初の列に挙げられるイベントハンドラー名前セットを、 Windowを反映するbody要素のイベントハンドラーセットと呼ぶ。


以下は、Windowオブジェクト自体のイベントハンドラーIDL属性として、Windowオブジェクト自身でサポートされるイベントハンドラー(および対応するイベントハンドラーイベント型)であり、そのWindowオブジェクトの関連付けられたDocumentが所有する対応するイベントハンドラーコンテンツ属性およびイベントハンドラーIDL属性がすべてのbody要素とframeset要素で公開される:

イベントハンドラーイベントハンドラーイベント型
onafterprint

WindowEventHandlers/onafterprint

Support in all current engines.

Firefox6+Safari13+Chrome63+
Opera50+Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS13+Chrome Android63+WebView Android63+Samsung Internet8.0+Opera Android46+
afterprint
onbeforeprint

WindowEventHandlers/onbeforeprint

Support in all current engines.

Firefox6+Safari13+Chrome63+
Opera50+Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS13+Chrome Android63+WebView Android63+Samsung Internet8.0+Opera Android46+
beforeprint
onbeforeunload

WindowEventHandlers/onbeforeunload

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android4+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12+
beforeunload
onhashchange

WindowEventHandlers/onhashchange

Support in all current engines.

Firefox3.6+Safari5+Chrome5+
Opera10+Edge79+
Edge (Legacy)12+Internet Explorer8+
Firefox Android4+Safari iOS5+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android10.1+
hashchange
onlanguagechange

WindowEventHandlers/onlanguagechange

Firefox32+Safari?Chrome37+
Opera24+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android4+Safari iOS?Chrome Android37+WebView Android37+Samsung Internet4.0+Opera Android24+
languagechange
onmessage

WindowEventHandlers/onmessage

Support in one engine only.

Firefox?Safari?Chrome60+
Opera47+Edge79+
Edge (Legacy)NoInternet Explorer?
Firefox Android?Safari iOS?Chrome Android60+WebView Android60+Samsung Internet8.0+Opera Android44+
message
onmessageerror

WindowEventHandlers/onmessageerror

Firefox57+Safari?Chrome60+
Opera47+Edge79+
Edge (Legacy)NoInternet Explorer?
Firefox Android57+Safari iOS?Chrome Android60+WebView Android60+Samsung Internet8.0+Opera Android44+
messageerror
onofflineoffline
ononlineonline
onpagehidepagehide
onpageshowpageshow
onpopstate

WindowEventHandlers/onpopstate

Support in all current engines.

Firefox4+Safari6+Chrome5+
Opera11.5+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android4+Safari iOS5.1+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android11.5+
popstate
onrejectionhandled

WindowEventHandlers/onrejectionhandled

Support in all current engines.

Firefox69+Safari11+Chrome49+
Opera36+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android🔰 68+Safari iOS11.3+Chrome Android49+WebView Android49+Samsung Internet5.0+Opera AndroidNo
rejectionhandled
onstorage

WindowEventHandlers/onstorage

Support in all current engines.

Firefox45+Safari4+Chrome1+
Opera15+Edge79+
Edge (Legacy)15+Internet Explorer9+
Firefox Android45+Safari iOS4+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android14+
storage
onunhandledrejection

WindowEventHandlers/onunhandledrejection

Support in all current engines.

Firefox69+Safari11+Chrome49+
Opera36+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android🔰 68+Safari iOS11.3+Chrome Android49+WebView Android49+Samsung Internet5.0+Opera AndroidNo
unhandledrejection
onunload

WindowEventHandlers/onunload

Support in all current engines.

FirefoxYesSafariYesChromeYes
OperaYesEdgeYes
Edge (Legacy)12+Internet ExplorerYes
Firefox AndroidYesSafari iOSYesChrome AndroidYesWebView AndroidYesSamsung InternetYesOpera AndroidYes
unload

以下は、イベントハンドラーコンテンツ属性とイベントハンドラーIDL属性の両方として、すべてのHTML要素でサポートされるイベントハンドラー(および対応するイベントハンドラーイベント型)である。 イベントハンドラーIDL属性として、すべてのDocumentオブジェクトでサポートされる:

イベントハンドラーイベントハンドラーイベント型
oncutcut
oncopycopy
onpastepaste

以下は、イベントハンドラーIDL属性としてDocumentオブジェクトでサポートされるイベントハンドラー(および対応するイベントハンドラーイベント型)である:

イベントハンドラーイベントハンドラーイベント型
onreadystatechangereadystatechange

8.2 WindowOrWorkerGlobalScopeミックスイン

WindowOrWorkerGlobalScope

Support in all current engines.

Firefox1+SafariYesChrome4+
OperaYesEdge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android4+Safari iOSYesChrome Android18+WebView Android37+Samsung Internet1.0+Opera AndroidYes

WindowOrWorkerGlobalScopeミックスインは、WindowおよびWorkerGlobalScopeオブジェクトで公開されるAPIを使用するためのものである。

他の標準は、適切な参照と一緒に部分的なインターフェイスミックスインWindowOrWorkerGlobalScope { … };を使用して、さらに拡張することを勧める。

self . isSecureContext

このグローバルオブジェクトが安全なコンテキストを表すかどうかを返す。[SECURE-CONTEXTS]

self . origin

文字列としてシリアライズされたグローバルオブジェクトの生成元を返す。

self . crossOriginIsolated

このグローバルで実行しているスクリプトが生成元をまたいだ分離を必要とするAPIを使用できるかどうかを返す。これは、`Cross-Origin-Opener-Policy` および`Cross-Origin-Embedder-Policy` HTTPレスポンスヘッダーおよび"cross-origin-isolated"機能に依存する。

開発者は、location.originよりもself.originを使用することを強く勧める。前者は環境の生成元を、後者は環境のURLを返す。https://stargate.example/文書で次のスクリプトを実行することを想像してみる:

var frame = document.createElement("iframe")
frame.onload = function() {
  var frameWin = frame.contentWindow
  console.log(frameWin.location.origin) // "null"
  console.log(frameWin.origin) // "https://stargate.example"
}
document.body.appendChild(frame)

self.originの方がより信頼性の高いセキュリティ指標となる。

8.3 Base64ユーティリティメソッド

WindowOrWorkerGlobalScope/atob

Support in all current engines.

Firefox1+Safari3+Chrome4+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android4+Safari iOS1+Chrome Android18+WebView Android≤37+Samsung Internet1.0+Opera Android11+

atob()およびbtoa()メソッドは、開発者がbase64エンコーディングとの間でコンテンツを変換することを可能にする。

これらAPIにおいて、簡略のために、"b"は"binary"、"a"は"ASCII"を表すと考えることができる。ただし実際には、主に歴史的な理由で、これらの関数の入力と出力の両方にはUnicode文字列である。

result = self . btoa( data )

入力データを取得し、U+0000からU+00FFまでの範囲で文字のみを含むUnicode文字列の形式で、それぞれ値0x00から0xFFまでを持つバイナリーバイトを表し、そのbase64表現に変換したものを返す。

入力文字列に範囲外の文字が含まれる場合、"InvalidCharacterError" DOMExceptionを投げる。

result = self . atob( data )

入力データを取得し、base64でエンコードされたバイナリーデータを含むUnicode文字列の形式で、これをデコードし、それぞれ0x00から0xFFまでの値を持つバイナリーバイトを表す、そのバイナリーデータに対応した、範囲U+0000からU+00FFまでの文字から成る文字列を返す。

入力文字列が妥当なbase64データではない場合、"InvalidCharacterError" DOMExceptionを投げる。