ASP.Net AJAX 配列オブジェクトをシリアル化しようとすると、「スタック領域不足」エラーが発生しました。
単純化されたコードを使用したシナリオは次のとおりです。
Default.aspx
MainScript.js
function getObject(){ return new Array(); } function function1(obj){ var s=Sys.Serialization.JavaScriptSerializer.serialize(obj); alert(s); } function function2(){ var obj=getObject(); var s=Sys.Serialization.JavaScriptSerializer.serialize(obj); alert(s); }
Content.aspx
ContentScript.js
function serializeObject(){ var obj=window.top.getObject(); window.top.function1(obj); // <– This works fine obj=new Array(); window.top.function1(obj); // <– this causes an Out of Stack Space error }
サンプルページと JavaScript のコードはこちら.
ここに aspx ページのコードを投稿すると、問題が発生しました。したがって、上記のリンクをチェックして、aspx ページのコードを確認してください。
コンテンツ ページ (content.aspx) をホストする IFrame を含む Web ページ (default.aspx)。
「Serialize Object」ボタンをクリックすると、JavaScript 関数 serializeObject() が呼び出されます。シリアル化は、上部ウィンドウ (フレームの外側) で作成された Array オブジェクトに対して正常に機能します。ただし、配列オブジェクトが IFrame で作成されている場合、シリアライゼーションはスタック領域不足エラーで爆撃します。ASP.Net AJAX JS ファイルを調べてみたところ、配列オブジェクトの型を特定しようとしてプロセスが無限ループに陥っていることがわかりました。Number.IsInstanceOf を無限に呼び出すと、すぐにスタック不足エラーが発生します。
何か案は?