「開放されたスクリプトからコードを実行できません」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==開放されたスクリプトからコードを実行できません== [IE][JavaScript] ===発生例=== File:0052_err_script01.jpg 以下の例で発生 *…」) |
|||
1行目: | 1行目: | ||
==開放されたスクリプトからコードを実行できません== | ==開放されたスクリプトからコードを実行できません== | ||
− | [IE][JavaScript] | + | [[IE][JavaScript]] |
===発生例=== | ===発生例=== |
2020年2月15日 (土) 07:59時点における版
目次
開放されたスクリプトからコードを実行できません
[[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 矢木浩人