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