2010年10月7日木曜日

javascript Window間オブジェクト操作の注意点

window.openして子ウィンドウ側から親ウィンドウのselectboxの値を変更するコードを実行したところ
「サーバによって例外が返されました」というわけわからないエラーが発生(サーバにアクセスしてないし)。。
※テストブラウザはIE6

var option = new Option('xxxxx','xxxxx');
parentSelectObj.options[parentSelectObj.options.length] = option;
 //↑ここで上記エラー


ふーむ、ネット調べたりオライリー本読み直してみたところ、
・フレーム間、ウィンドウ間ではスコープチェーンが違う
・関数が実行されるスコープは、関数を呼び出したフレームではなく関数が定義されたフレーム(ウィンドウもしかり)
・コンストラクタも関数
・コンストラクタとそのコンストラクタのプロトタイプオブジェクトは、ウィンドウごとに独立

言われてみれば確かに。


というわけで、コードを以下に修正したところ無事動作しました。

var option = window.opener.document.createElement('Option');
option.text  = 'xxxxx';
option.value = 'xxxxx';
parentSelectObj.options[parentSelectObj.options.length] = option;



0 件のコメント:

コメントを投稿