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

MyMemoWiki

「開放されたスクリプトからコードを実行できません」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==開放されたスクリプトからコードを実行できません== [IE][JavaScript] ===発生例=== File:0052_err_script01.jpg 以下の例で発生 *…」)
 
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
==開放されたスクリプトからコードを実行できません==
+
==[[開放されたスクリプトからコードを実行できません]]==
[IE][JavaScript]
+
[[IE]] | [[JavaScript]] |
  
 
===発生例===
 
===発生例===
6行目: 6行目:
 
[[File:0052_err_script01.jpg]]
 
[[File:0052_err_script01.jpg]]
 
以下の例で発生
 
以下の例で発生
*JavaScriptファイル(hoge.js)に、クラスを定義
+
*[[JavaScript]]ファイル(hoge.js)に、クラスを定義
 
*定義したクラスには、メソッドを持たせる。
 
*定義したクラスには、メソッドを持たせる。
 
hoge.js
 
hoge.js
24行目: 24行目:
  
 
===想定===
 
===想定===
*Javaのクラスのイメージで、書いちゃったのが失敗。
+
*[[Java]]のクラスのイメージで、書いちゃったのが失敗。
 
*実際のjsファイルはひとつでも、それぞれのWindowに読込まれているファイルは別物。
 
*実際のjsファイルはひとつでも、それぞれのWindowに読込まれているファイルは別物。
 
*なので、ダイアログで、同じクラスと考えてリターンしても、
 
*なので、ダイアログで、同じクラスと考えてリターンしても、

2020年2月16日 (日) 04:20時点における最新版

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

IE | JavaScript |

発生例

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