トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

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



目次



記事一覧

キーワード

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

[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(); 



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.