@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ダウンロードダイアログ表示後、Javascriptが動作しない

1
投稿者投稿内容
がつん
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 62
お住まい・勤務地: Sydney
投稿日時: 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 ]
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 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)の場合はブラウザ上の表示は変わらない
という違いと同じ。

私も以前同じ問題にぶちあたって、ダウンロードボタンだけ
二度押し防止系の処理を外したことがあります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-11 21:22
 表示されているものと、内部的に持っているものが違うからです。

 IE のみで発生する現象で(ついでにここで既出の問題で)、ポストバック(POSTのリクエスト)に対するレスポンスを
引用:

'クライアント側に応答
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()


の様に変更しています。このレスポンスを受け取った IE が、ダウンロードダイアログを表示します。つまり、画面の表示は過去の遺物であり、本当に表示されている内容はディスクに保存されたか、破棄されています!!

_________________
がつん
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 62
お住まい・勤務地: Sydney
投稿日時: 2005-07-12 13:05
ぼのぼのさん、Jittaさんご回答ありがとうございます。
試行錯誤の結果、Post元コントロールであるwebcontrolをhtmlcontrolに
変える事により、当現象
「クライアントスクリプトにコーディングしている
var sent;
sent = false; が効かない」
は解消しました。
WebControlでレスポンスを変更すると、何故このような現象が起きるかは
依然不明です。
1

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