- PR -

消去しました

投稿者投稿内容
kogat
会議室デビュー日: 2007/05/21
投稿数: 6
投稿日時: 2007-05-21 19:15
 

[ メッセージ編集済み 編集者: kogat 編集日時 2007-06-01 01:48 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-05-21 20:09
マシンの負荷が高いときに比較的よく発生しませんか?

window.open()が完了しないうちにsubmit()がされると
引用:

しかし、ごくまれに(数十回に1回程度)、ブランク(about:blank)ウィンドウはそのままで、さらにもう一つウィンドウが開き、そこにサーバーからのレスポンスが
表示されることがあります。(サーバーではサーブレットが動作しており、簡単な文字列のHTMLを返すのみです。)


という現象になるようです。

javascriptで同期処理ができないはずなので確実な対処方法はないのですが、
若干待たせることで確率を抑えることはできるようです。
私はjavascriptには明るくないのですが、何か良い対処方法をご存知の方いらっしゃいませんか?
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-05-21 20:25
そのウィンドウにonloadイベントを割り当てるとか。
開いた側のHTMLでonloadを指定しておいて、そこから親にsubmitを促すとか。
kogat
会議室デビュー日: 2007/05/21
投稿数: 6
投稿日時: 2007-05-21 20:26


[ メッセージ編集済み 編集者: kogat 編集日時 2007-06-01 01:49 ]
kogat
会議室デビュー日: 2007/05/21
投稿数: 6
投稿日時: 2007-05-21 20:55


[ メッセージ編集済み 編集者: kogat 編集日時 2007-06-01 01:49 ]
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-05-21 23:04
引用:

function doTransaction(options) {
var f = self.document.MainForm;
var t = new String(new Date().getTime());
w = window.open('', t, options);
f.target = t;
w.document.write("<html><body onload='opener.document.MainForm.submit();'></body></html>");
w.document.close();
}



時間をウィンドウ名にしてる理由はなんですか?
ボタン複数回押下時に画面ひらかさるので。
ターゲットの見直しをしたほうがいいかも。
2枚以上開くなら必要かもだけど。
1枚限定なら固定名称のほうがいいですよ。
けむ
常連さん
会議室デビュー日: 2003/09/26
投稿数: 40
投稿日時: 2007-05-22 00:03
引用:

w = window.open('', t, options);
f.target = t;
w.document.write("<html><body onload='opener.document.MainForm.submit();'></body></html>");



IEではパフォーマンスのためか、window.openの完了を待たずに処理が実行され、上記コードもタイミング次第では、w.document.writeで失敗する可能性があります。一旦、setTimeoutを利用して別の関数でsubmitを呼ぶことで回避できるそうです。
このとき、setTimeoutの第二引数は0でも問題ないそうです。

※情報源はオライリーの[JavaScript & DHTMLクックブック]です。
kogat
会議室デビュー日: 2007/05/21
投稿数: 6
投稿日時: 2007-05-22 00:39


[ メッセージ編集済み 編集者: kogat 編集日時 2007-06-01 01:50 ]

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