1. 2.6 構造化データの安全な受け渡し
      1. 2.6.1 シリアル化可能なオブジェクト
      2. 2.6.2 転送可能なオブジェクト
      3. 2.6.3 Restricting to the same agent cluster
      4. 2.6.4 Structured cloning API

2.6 構造化データの安全な受け渡し

プラットフォームオブジェクトを含むJavaScriptオブジェクトをレルムの境界を越えて渡すことをサポートするために、この仕様では、オブジェクトをシリアル化および逆シリアル化するためのインフラを定義する。これには、基になるデータをコピーする代わりに転送する場合も含まれる。総称して、このシリアル化/逆シリアル化プロセスは"構造化クローン"と呼ばれるが、ほとんどのAPIは別々のシリアル化と逆シリアル化のステップを実行する。(注目すべき例外はstructuredClone()メソッドである。)

2.6.1 シリアル化可能なオブジェクト

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

シリアル化可能なオブジェクトは、特定のrealmから独立した方法で、シリアル化され、後で逆シリアル化されることをサポートする。 これにより、それらをディスクに保存して後で復元したり、エージェントやエージェントクラスターの境界を越えて複製したりすることができる。

すべてのオブジェクトがシリアル化可能なオブジェクトであるとは限らない。また、シリアル化可能なオブジェクトであるオブジェクトのすべての側面が、シリアル化されるときに必ずしも保持されるわけではない。

2.6.2 転送可能なオブジェクト

転送可能なオブジェクトは、エージェント間での転送をサポートする。 転送とは、基になるデータへの参照を共有し、転送されるオブジェクトを切り離しながら、オブジェクトを効果的に再作成することである。これは、高価なリソースの所有権を譲渡するのに役立つ。すべてのオブジェクトが転送可能なオブジェクトであるとは限らない。また、転送可能なオブジェクトであるオブジェクトのすべての側面が、転送時に必ずしも保持されるわけではない。

転送は、不可逆的かつ非べき等な操作である。一度転送されたものは、二度と転送することはできず、実際に使用することもできない。

2.6.3 Restricting to the same agent cluster

Some objects, such as SharedArrayBuffer objects, are restricted to the same agent cluster: they can only be deserialized or received in the agent cluster they were serialized or transferred from. Such objects also cannot be serialized for storage. For example, when postMessage() is used to send one to a cross-site iframe, a shared worker, or a service worker, a messageerror event is fired instead of a message event.

2.6.4 Structured cloning API

result = self.structuredClone(value[, { transfer }])

structuredClone

Support in all current engines.

Firefox94+Safari15.4+Chrome98+
Opera?Edge98+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

入力値を取得し、構造化クローンアルゴリズムを実行してディープコピーを返す。transfer配列にリストされている転送可能なオブジェクトは、複製されるだけでなく転送される。つまり、もはや入力値で使用できなくなる。

入力値のいずれかの部分がシリアル化できない場合、"DataCloneError" DOMExceptionを投げる。