1,698 バイト追加
、 2020年2月15日 (土) 07:29
==開放されたスクリプトからコードを実行できません==
[IE][JavaScript]
===発生例===
[[File:0052_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);
var newH = new Hoge(ret); // Hogeに、値をコピーするコンストラクタを実装しておく
newH.foo();