目次
開放されたスクリプトからコードを実行できません
[IE][JavaScript]
発生例
以下の例で発生
- JavaScriptファイル(hoge.js)に、クラスを定義
- 定義したクラスには、メソッドを持たせる。
hoge.js
function Hoge() { this.field = ・・・ this.foo() = function() { : } }
- 上記のクラス(のインスタンス)を、モーダルダイアログに渡し、ダイアログから同じクラスをリターンさせる。
var h = new Hoge(); // ret は、Dialogで生成した、Hogeイン var ret = window.showModalDialog(url, h); スタンス ret.foo(); // ここで発生
想定
- Javaのクラスのイメージで、書いちゃったのが失敗。
- 実際のjsファイルはひとつでも、それぞれのWindowに読込まれているファイルは別物。
- なので、ダイアログで、同じクラスと考えてリターンしても、
var h = new Hoge(); : window.returnValue = h; window.close();
- ダイアログを閉じた時点で、実装されたメソッドの内容は開放されてしまうんだろう。
- 値は、保持されている。
対応
ダイアログ側で、クラスをインスタンス化せずに、渡されたインスタンスを使う
戻ってきたインスタンスの値をコピーして、新しいインスタンスを作り直す。
var h = new Hoge(); // ret は、Dialog側で生成した、Hogeインスタンス var ret = window.showModalDialog(url, h); var newH = new Hoge(ret); // Hogeに、値をコピーするコンストラクタを実装しておく newH.foo();
YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto
Copyright© 矢木 浩人 All Rights Reserved.