トップ 一覧 ping 検索 ヘルプ RSS ログイン

開放されたスクリプトからコードを実行できませんの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!開放されたスクリプトからコードを実行できません
[IE][JavaScript]

!!発生例

{{ref_image err_script01.jpg}}
以下の例で発生
*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); スタンス
 // ret は、Dialog側で生成した、Hogeインスタンス
 var ret = window.showModalDialog(url, h); 
 var newH = new Hoge(ret); // Hogeに、値をコピーするコンストラクタを実装しておく
 newH.foo();