- PR -

サブウィンドからメインウィンドのSCRIPT制御について

1
投稿者投稿内容
Aki
会議室デビュー日: 2006/03/03
投稿数: 3
投稿日時: 2006-03-03 14:54
どうもはじめまして。

現在、サブウィンドウからメインウィンドウのjavascriptを呼び出すという処理を行っています。
(サブウィンド、メインウィンド共FRAME分けされてます)
具体的な処理の流れは

1. サブウィンドのsubmit → サーバ処理 → ページ表示

2. 表示されたページ(サブウィンド)のonLoad()イベントでメインウィンドのscript
を呼び出す
3. メインウィンドのscript内でsubmit() → 自画面の再表示処理

4.サブウィンドのsubmit() target='_self' → 自画面の再表示処理



とう感じになっています。

ソースとしては

★サブウィンド★
function onLoad(){
  document.MyForm.target = '_parent';
  parent.opener.openerFunction();
  document.MyForm.submit(); → 自画面再表示
}

★メインウィンド★
function openerFunction(){
  document.MyForm2.target = '_parent';
  document.MyForm2.submit(); → 自画面再表示

}

上記で実行したところ一度だけなら全ての処理が正常に行われるのですが、2回目以降はscriptエラーになってしまいます。
エラーメッセージ:
【オブジェクトでサポートされていないプロパティまたはメソッドです】

メインウィンドウを認識してないのかと思い、
function onLoad(){
  document.MyForm.target = '_parent';
  parent.opener.document.title; → タイトルを表示させる
}
としてみると

【アクセスが拒否されました】
というエラーメッセージが表示されます。

ちなみに
function onLoad(){
  document.MyForm.target = '_parent';
  parent.opener.document.fucus(); → フォーカス
}
は正常に実行され、Javascriptのネイティブな関数は認識するようです。

なぜ一度は実行できるのに2回目以降は実行できないのか
わかりません。



直接JAVAには関わりのない箇所で申し訳ありませんが、ご教受お願いします。

OS:Microsoft windowXP professional sp1
IE: 6.0.28 xpsp2
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2006-03-03 15:50
http://support.microsoft.com/default.aspx?scid=kb;ja;418126
これは関係ないですかね。・・・関係なさそうな気がしますけどとりあえず。

submitした結果を別のフレームに表示するとかしても現象が出るのかなぁ。
つまりは、formを提出(submit)したら、もうその画面に表示されているものは仕事を終えた残りカスなのでjavascriptなどが動かない、と。
「2回目以降だけ」というのがちょっと怪しい気もしますね。
Aki
会議室デビュー日: 2006/03/03
投稿数: 3
投稿日時: 2006-03-03 16:24
ご返信ご助言ありがとうございます。

ためしに

4.サブウィンドのsubmit() target='_self' → 自画面の再表示処理

の処理を行わず、メインウィンドウのスクリプトを呼び出すだけにしてみましたが
やはり結果は同じでした。

一回目、サブウィンドウからメインウィンドウを呼び出した時に
メインウィンドウ側のformをsubmit()することによって、
メインウィンドウがページ遷移したとみなされ、
サブウィンドウ上からメインウィンドウにアクセスできないのでは
ないかと思っているのですが。

しかし、ネイティブな関数が呼び出されるということは、
メインウィンドウをオブジェクトして認識しているのでは
ないかとも思いますし。

現在のところ代替手段もなくさまよってます。
どうしてもできないということが証明できれば、関係者も納得してくれると
思うのですが。。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2006-03-03 17:06
こんにちは

推測なんですけど、3のサブウィンドウからメインウィンドウをsubmit()した際に
親子関係が不完全なものになってしまっているのではないでしょうか?
それで、親ウィンドウのプライベート(?)なメンバにアクセスできないということでは?

JavaScriptの動きはよくわかりませんけど、メインウィンドウが再表示された時点で
厳密なサブウィンドウのopenerではなくなっている気がします。

メインウィンドウからサブウィンドウの再表示処理を行ってみたらどうなるでしょうか?
Aki
会議室デビュー日: 2006/03/03
投稿数: 3
投稿日時: 2006-03-03 20:14
ご返信ありがとうございます。

メインウィンドウからサブの再表示を行ってみたところ、
正常にアクセスできるようになりました。

おっしゃるとおり親子関係が崩れていたようです。

一郎さん、未記入さん
ありがとうございます!!
1

スキルアップ/キャリアアップ(JOB@IT)