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

MyMemoWiki

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

提供: MyMemoWiki
2020年2月15日 (土) 08:29時点におけるPiroto (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

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

  1. | IE | JavaScript

発生例

0052 err script01.jpg 以下の例で発生

  • JavaScriptファイル(hoge.js)に、クラスを定義
  • 定義したクラスには、メソッドを持たせる。

hoge.js

  1. function Hoge() {
  2. this.field = ・・・
  3. this.foo() = function() {
  4. :
  5. }
  6. }
  • 上記のクラス(のインスタンス)を、モーダルダイアログに渡し、ダイアログから同じクラスをリターンさせる。
  1. var h = new Hoge();
  2. // ret は、Dialogで生成した、Hogeイン
  3. var ret = window.showModalDialog(url, h); スタンス
  4. ret.foo(); // ここで発生

想定

  • Javaのクラスのイメージで、書いちゃったのが失敗。
  • 実際のjsファイルはひとつでも、それぞれのWindowに読込まれているファイルは別物。
  • なので、ダイアログで、同じクラスと考えてリターンしても、
  1. var h = new Hoge();
  2. :
  3. window.returnValue = h;
  4. window.close();
  • ダイアログを閉じた時点で、実装されたメソッドの内容は開放されてしまうんだろう。
  • 値は、保持されている。

対応

ダイアログ側で、クラスをインスタンス化せずに、渡されたインスタンスを使う

戻ってきたインスタンスの値をコピーして、新しいインスタンスを作り直す。

  1. var h = new Hoge();
  2. // ret は、Dialog側で生成した、Hogeインスタンス
  3. var ret = window.showModalDialog(url, h);
  4. var newH = new Hoge(ret); // Hogeに、値をコピーするコンストラクタを実装しておく
  5. newH.foo();