問題タブ [structured-clone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1498 参照

javascript - 構造化クローン アルゴリズムによってオブジェクトのクローンを作成できるかどうかを確認する方法

構造化クローン アルゴリズムは、とりわけ、 を介してウィンドウ間でデータを渡すために使用されるシリアライゼーション アルゴリズムwindow.postMessageです。(JSON とは異なり) 再帰オブジェクトをサポートしますが、DOM ノード、関数、エラーなどはサポートしません。

私が望むのは、特定のオブジェクトが構造化されたクローン アルゴリズムによってシリアル化できるかどうかを確認する簡単な方法です。オブジェクトを再帰的にウォークし、各プロパティが DOM Node、Function、または Error であるかどうかを確認できますが、それは完全な答えではなく、もっと良い方法があるかどうか疑問に思っていました。

0 投票する
1 に答える
327 参照

request - Fetch API リクエスト オブジェクトの構造化クローン作成に最適なオプションは何ですか?

CSRF で保護された (クエリ文字列 + Cookie) API POST リクエストを保存して、後で webapp がオンラインに戻ったときに再生しようとしています。

これを行うには、Request オブジェクト (Fetch API) を IndexedDB に保存したいのですが、IDBObjectStore.put が DataCloneError "An object could not be cloned" で失敗します。

Request オブジェクトには単純な JSON 本体があり、バイナリ データはなく、すべて文字列だけです。
これは Service Worker (Web Worker) 環境で実行されています。

構造化された複製アルゴリズムが要求オブジェクトを複製しない理由はありますか? [回答: はい] もしそうなら、構造化されたクローニングの代わりに、このオブジェクトを脱水/再水和するための最良のオプションは何ですか?

Request オブジェクトの個々のプロパティを知る/アクセスする必要はありません。必要な Request の部分は、URL、ヘッダー、本文、および Cookie です (ただし、コードにそれを認識させたくありません)。

アドバイスをよろしくお願いします。

0 投票する
1 に答える
146 参照

javascript - 構造化クローニング - クローンを作成するスレッドは?

私はWebWorkerでいくつかの作業を行っています。オブジェクトを GUI スレッドに戻すと、Javascript エンジンは構造化された複製アルゴリズムを使用してオブジェクトを複製し、GUI スレッドは複製されたオブジェクトを受け取ります。

私の質問は、送信者 (WebWorker)、受信者 (GUI スレッド)、またはその両方で、複製作業がどこで行われているのか、それとも完全に間違った方向に進んでしまったのかということです。

0 投票する
1 に答える
44 参照

javascript - ファイル インスタンスのカスタム プロパティが、Web ワーカーに渡すときに複製されない

MDN によると、Fileオブジェクトは Web ワーカーに渡すことができ、構造化された複製アルゴリズムを使用して適切に複製されます。ここまでは順調ですね。そして、これは私がテストしたすべてのブラウザーで機能します。

しかし、これはうまくいきません:

不思議なことに、これは機能します:

これは Chrome や Firefox などの最近のバージョンで発生するので、ブラウザの問題ではないと思います。

オプション:

  1. オブジェクトのクローンを作成すると、そのプロパティが失われます。
  2. 自分が作成したオブジェクトではなく、定義済みのオブジェクト (ファイルなど) を複製すると、追加したすべてのカスタム プロパティが失われます。これは、ブラウザーが非標準オブジェクト プロパティを無視するためです。
  3. 仕様がわかりません。オブジェクトを Web ワーカーに渡すときにカスタム プロパティが複製されないことは明らかです。

ここで何か間違ったことをしていますか?前もって感謝します ;))