Chrome 拡張機能でのエラー処理: 「循環構造を JSON に変換する」問題を解決する
Chrome 拡張機能を使用するときによく発生する問題データのシリアル化に関連するエラー。そのようなエラーの 1 つは、chrome.extension.sendRequest の使用中に発生した「TypeError: Converting circular Structure to JSON」です。これは、リクエストに循環参照を持つオブジェクトが含まれており、JSON シリアル化が妨げられている場合に発生します。
提供されたコード スニペットでは、リクエスト オブジェクトには pagedoc プロパティが含まれています。この変数はおそらく DOM ノードを表します。 JavaScript の DOM ノードには循環参照があり、これは JSON シリアル化では問題になります。
DOM の循環参照について
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 サイトの他の関連記事を参照してください。