| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
ページの作成:「==開放されたスクリプトからコードを実行できません== [IE][JavaScript] ===発生例=== File:0052_err_script01.jpg 以下の例で発生 *…」
==開放されたスクリプトからコードを実行できません==
[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();

案内メニュー