「開放されたスクリプトからコードを実行できません」の版間の差分
ナビゲーションに移動
検索に移動
(同じ利用者による、間の1版が非表示) | |||
1行目: | 1行目: | ||
− | ==開放されたスクリプトからコードを実行できません== | + | ==[[開放されたスクリプトからコードを実行できません]]== |
− | + | [[IE]] | [[JavaScript]] | | |
===発生例=== | ===発生例=== | ||
6行目: | 6行目: | ||
[[File:0052_err_script01.jpg]] | [[File:0052_err_script01.jpg]] | ||
以下の例で発生 | 以下の例で発生 | ||
− | * | + | *[[JavaScript]]ファイル(hoge.js)に、クラスを定義 |
*定義したクラスには、メソッドを持たせる。 | *定義したクラスには、メソッドを持たせる。 | ||
hoge.js | hoge.js | ||
24行目: | 24行目: | ||
===想定=== | ===想定=== | ||
− | * | + | *[[Java]]のクラスのイメージで、書いちゃったのが失敗。 |
*実際のjsファイルはひとつでも、それぞれのWindowに読込まれているファイルは別物。 | *実際のjsファイルはひとつでも、それぞれのWindowに読込まれているファイルは別物。 | ||
*なので、ダイアログで、同じクラスと考えてリターンしても、 | *なので、ダイアログで、同じクラスと考えてリターンしても、 |
2020年2月16日 (日) 04:20時点における最新版
目次
開放されたスクリプトからコードを実行できません
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 矢木浩人