過去ログ表示


過去ログ 110 を表示

トピック内全 19 記事中の 11 〜 19 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0] [1]

Re[3]: ボタン連打で遷移先画面のJavaScriptが動く件
(#17806) このトピック中11番目の投稿
(環境: WinXP/Firefox1.0)

2005/03/30(Wed) 01:11:28 編集(投稿者)

> なるほど、と思いましたのでHTMLを以下に置きました。
> http://www.geocities.jp/afternoontea19860101/win1.htm
> 上記を表示して "send"ボタンを連打すると、遷移先画面のJavaScriptが動きます。

ボタンの連打を防ぐコードですが、
function doTransaction(trxID, button) {
button.disabled = true;
self.document.MainForm.submit();
}
...
<input type="button" value="send" onclick="javascript:doTransaction('window_1', this);">

アプリのつくりによりますが、とりあえず上記のようにすれば今回のバグは回避できますね。
2重送信ってのはWebアプリケーションにとって都合の悪いことがほとんどなので
こういうコードを使って良いことはあっても害にはならないでしょう。
あまりキレイではないですが。

(環境: Win2000/Mozilla1.8b)

> なるほど、と思いましたのでHTMLを以下に置きました。
> http://www.geocities.jp/afternoontea19860101/win1.htm
> 上記を表示して "send"ボタンを連打すると、遷移先画面のJavaScriptが動きます。
> (もちろん遷移先画面でonLoadなどは使っていません)

<form>のonSubmitでreturn falseなのに、<input>のonClickのsubmit()でサブミットされるのを期待するとは是如何、というのはさておいて...(^^)

Mozilla 1.8b系のNightlyでも、2〜3回のクリック連打で簡単に再現しますね(^^;

今回のケースと同様に<form>のonSubmitではreturn falseを返しておいてEnterでのサブミットを禁止しておき、かつ、他のフォーム要素のonClickで複数回のform.submit()を出す、というような、フォーム関連のJavaScriptの仕様の意図とは異なった書き方をしている数多くのIE向けのサイト用に、途中で複数のsubmit()を出すように変更が入ったはずです。
このために、複数のサブミット要求がイベントキューに存在することが許されるようになったのに、
最初のsubmit()で結果が返ってきてそのロード処理を開始する前に、イベントキューなどのクリーンアップなどの処理をきちんとしていないので、残っていたイベントが処理されてしまう、というような問題だと思います。
それとも、ロード処理が完了すればイベントが残っていてもそれはキャンセルされるのであり、ロード処理中にはスケジュールすべきでないイベントをスケジュールしてしまう、という問題かな?

ただし、submit()によるHTTP GET/POSTで返ってきたHTMLの中に、同じ名前のfunctionが存在しない場合には、何度テストしてもfunction not definedのようなJavaScriptエラーは起こりませんでしたから、たとえイベントキューに残っていても無条件にキューにあるものを実行しようとする、というほどには、ひどくなさそうです(^^)

ところで、この問題のバグがあってフィックスされた、というのは、どこで仕入れた情報ですか?
本家のBugzillaで、"event load"で検索してでてくる中では、Bug 199430 がこの問題に一番近いバグなんですが、まだNEWのままです。
> Bug 199430 : eventhandlers still fire while a new page is loading
( https://bugzilla.mozilla.org/show_bug.cgi?id=199430 )

(環境: WinXP/Opera7)

皆様、情報ありがとうございます。

> ところで、この問題のバグがあってフィックスされた、というのは、どこで仕入れた情報ですか?

すいません、こちらの誤りです。
(当初HTMLをローカルにおいて行った再現テストではMozilla1.6まで発生し
1.7以降は20〜30回テストしても発生しなかったので1.7でFIXされたのでは?と
思ったんですが、HTMLをWebサーバ上に置くと1.7以降も発生しました。)

Re[4]: ボタン連打で遷移先画面のJavaScriptが動く件
(#17820) このトピック中14番目の投稿
(環境: WinXP/Opera7)

> アプリのつくりによりますが、とりあえず上記のようにすれば今回のバグは回避できますね。
> 2重送信ってのはWebアプリケーションにとって都合の悪いことがほとんどなので
> こういうコードを使って良いことはあっても害にはならないでしょう。
> あまりキレイではないですが。

サンプルコードを作っていただいてありがとうございます。
今後は是非参考にさせていただきます。
ただ、今回は既存Webアプリケーションシステムなので
・Moziilaを許容して、Mozilla対応として既存画面のJavaScriptを修正する
・Mozilla(系)ブラウザを許容しない
上記のいずれを選択するかという判断になり、前者の対応策を取るのは
難しいなと思っています。

(環境: WinXP/Opera7)

Bugzillaにレポートをあげていただいたんですね。
ありがとうございます。

(環境: Win2000/Mozilla1.8b)

2005/03/30(Wed) 13:53:32 編集(投稿者)

> (当初HTMLをローカルにおいて行った再現テストではMozilla1.6まで発生し
> 1.7以降は20〜30回テストしても発生しなかったので1.7でFIXされたのでは?と
> 思ったんですが、HTMLをWebサーバ上に置くと1.7以降も発生しました。)

おそらく、バグ 4070 が、今回のケースの問題のばぐじらのバグにあたると思います。
> Bug 4070 : onsubmitは実行されるが実際にサブミットされないタイミングがある
( http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=4070 )

でも、サブミット後の新しいページのロード中のクリックによるonClickではなく、サブミット前のページでのonClickの残骸による現象であることが明らかにわかる、こんなに明解なテストケースがあって、かなりの確率で簡単に再現できて、Mozillaの1.4.2〜1.6で発生と相当以前からわかっていた問題で、その上1.7.xのそれぞれのリリースでもきちんとテストされているんなら、ばぐじら(できれば本家のBugzilla)に報告しておいて欲しかった...

(環境: WinXP/Opera7)

> ばぐじら(できれば本家のBugzilla)に報告しておいて欲しかった...

ご説明します。こちらで当現象を認識したのが2005/3/28になります。
(問題事象が発生したのは1.4.2でした)
そこからMozillaのどのバージョンまでこの現象が発生するのか
(どのバージョンからならアクセスを許容できるか)の調査を行い、
本家のBugzillaは私の英語のwriting能力の問題で敷居が高いので、
当サイトにご相談させていただきました。
皆様にご協力いただき非常に助かってます。ありがとうございます。

また今後何かありましたら速やかにご相談することにします。

(環境: Win2000/Mozilla1.8b)

> ご説明します。こちらで当現象を認識したのが2005/3/28になります。
> (問題事象が発生したのは1.4.2でした)
> そこからMozillaのどのバージョンまでこの現象が発生するのか
> (どのバージョンからならアクセスを許容できるか)の調査を行い、
> 本家のBugzillaは私の英語のwriting能力の問題で敷居が高いので、
> 当サイトにご相談させていただきました。

なるほど。
道理で、問題の本質だけに絞ったテストケースになっているわけですね(^^)

この間紹介したバグは本質的に別の問題だったので、この問題のバグをばぐじらにオープンしました。
あとは、ばぐじらで。
> Bug 4361 : onClickでform.submit()を行うボタンが連続してクリックされると、サブミットの結果のページでそのonCLickイベントの処理が実行される
http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=4361

「済み」にしておきます。
済!
(環境: WinXP/Opera7)

> あとは、ばぐじらで。
了解しました。 対応ありがとうございます。
よろしくお願いします。


[ 前のトピック内容10件 ]
このトピックの全ページ / [0] [1]

返信不可


- Child Tree -