ホームページ > ウェブフロントエンド > jsチュートリアル > Chrome 拡張機能の「循環構造を JSON に変換しています」エラーを解決する方法は?

Chrome 拡張機能の「循環構造を JSON に変換しています」エラーを解決する方法は?

Patricia Arquette
リリース: 2024-11-29 01:18:14
オリジナル
717 人が閲覧しました

How to Solve the

Chrome 拡張機能でのエラー処理: 「循環構造を JSON に変換する」問題を解決する

Chrome 拡張機能を使用するときによく発生する問題データのシリアル化に関連するエラー。そのようなエラーの 1 つは、chrome.extension.sendRequest の使用中に発生した「TypeError: Converting circular Structure to JSON」です。これは、リクエストに循環参照を持つオブジェクトが含まれており、JSON シリアル化が妨げられている場合に発生します。

提供されたコード スニペットでは、リクエスト オブジェクトには pagedoc プロパティが含まれています。この変数はおそらく DOM ノードを表します。 JavaScript の DOM ノードには循環参照があり、これは JSON シリアル化では問題になります。

DOM の循環参照について

DOM ノードには、次の理由により固有の循環参照があります。

  • 各ノードは、 document.
  • document.body.
  • document.body.ownerDocument を介して DOM ツリーへの参照を持つドキュメント。

As a結果として、循環参照を走査しようとするため、JSON シリアル化は失敗します。

解決策: 循環参照の対処

この問題を解決するには、リクエスト オブジェクトを送信する前に、リクエスト オブジェクト内の循環参照を解除します。 DOM ノードは階層的であるため、循環参照なしで階層関係を表す新しいオブジェクトを作成できます:

var newObj = {
  id: pagedoc.id,
  children: []
};
for (var i = 0; i < pagedoc.children.length; i++) {
  newObj.children.push({
    id: pagedoc.children[i].id,
    ... // Continue building the nested structure without circular references
  });
}
ログイン後にコピー

リクエスト オブジェクトの pagedoc を newObj に置き換えて、循環参照を削除します:

chrome.extension.sendRequest({
  req: "getDocument",
  docu: newObj,
  name: 'name'
}, function(response){
  var efjs = response.reply;
});
ログイン後にコピー

循環参照を解除することで、リクエスト オブジェクトを正常にシリアル化し、拡張機能に送信できるようになりました。これにより、拡張機能は「循環構造を JSON に変換しています」エラーが発生することなくリクエストを処理し、期待される応答を提供できるようになります。

以上がChrome 拡張機能の「循環構造を JSON に変換しています」エラーを解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート