- - PR -
ダウンロードダイアログ表示後、Javascriptが動作しない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-11 13:47
こんにちは、いつもお世話になっています。
現在、スプレッドOUTPUTのEXLファイルをダウンロードする画面を作成しているの ですが、ダウンロード後、SUBMITしなくなる現象をどうも解決できません。 --------------サーバ側---------------------------------- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'MemoryStreamに内容を出力 Dim ms As New System.IO.MemoryStream FpSpread1.SaveExcel(ms) 'クライアント側に応答 Response.Clear() Response.ContentType = "application/VND.ms-excel" Response.AddHeader("Content- Disposition", "attachment;filename=spread.xls") Response.BinaryWrite(ms.ToArray()) ms.Flush() ms.Close() Response.End() -------クライアント側-------------------------- <HEAD>HEAD情報・・・ <script language="javascript"> var sent; sent = false; function send_check() { if(sent){ return false; }else{ sent = true; return true; } } </script> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server" onsubmit="return send_check()"> 二重SUBMITを防止する目的で、function send_checkを設けて制御しているの ですが、ファイルダウンロード画面を表示した場合に限り、CliantScript文頭の sent = false;が効いていない→function send_check→submit falseになってしま います。 「何故、ダウンロードダイアログを出力した場合にのみsent = false;が無効 なのか?」 が理解できません。 どうかヒント等ご教授いただけませんでしょうか。 よろしくお願いいたします。 [ メッセージ編集済み 編集者: がつん 編集日時 2005-07-11 13:49 ] | ||||
|
投稿日時: 2005-07-11 15:16
ブラウザ(1)--<request>-->Webサーバ--<response>-->ブラウザ(2)
通常(2)にはHTMLが返ってくるのですが、ダウンロードの場合は(2)が HTMLではないファイルで、まぁ期待通りダウンロードダイアログが 開くんですが、HTMLとしてのresponseは無いので、 ブラウザ上の表示は(1)のまんまなんです。 うーんうまく説明したい意図が伝わったでしょうか?自信がない… もちょっと追加すると、 --- (1)<a href="otherhtml.htm">遷移</a> (2)<a href="documents.zip">ダウンロード</a> --- (1)の場合はブラウザ上の表示が変わる、 (2)の場合はブラウザ上の表示は変わらない という違いと同じ。 私も以前同じ問題にぶちあたって、ダウンロードボタンだけ 二度押し防止系の処理を外したことがあります。 | ||||
|
投稿日時: 2005-07-11 21:22
表示されているものと、内部的に持っているものが違うからです。
IE のみで発生する現象で(ついでにここで既出の問題で)、ポストバック(POSTのリクエスト)に対するレスポンスを
の様に変更しています。このレスポンスを受け取った IE が、ダウンロードダイアログを表示します。つまり、画面の表示は過去の遺物であり、本当に表示されている内容はディスクに保存されたか、破棄されています!! _________________ | ||||
|
投稿日時: 2005-07-12 13:05
ぼのぼのさん、Jittaさんご回答ありがとうございます。
試行錯誤の結果、Post元コントロールであるwebcontrolをhtmlcontrolに 変える事により、当現象 「クライアントスクリプトにコーディングしている var sent; sent = false; が効かない」 は解消しました。 WebControlでレスポンスを変更すると、何故このような現象が起きるかは 依然不明です。 |
1