開放されたスクリプトからコードを実行できません
ナビゲーションに移動
検索に移動
目次
開放されたスクリプトからコードを実行できません
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();
© 2006 矢木浩人