- - PR -
ファイルダウンロードと画面更新を同時に行う方法?
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-13 20:04
こんばんは、はやしです。
CGIで、画面上に表示されているアンカをクリックすると、違う画面に遷移し、 なおかつJavascriptでEXCELファイルをダウンロードする方法を探しています。 環境はWinXPでブラウザはIE6.0 SP2です。 "HTMLを表示させる"事と、"ファイルダウンロード"する事の両方を 一回のsubmitに対する処理で書いてみたところ、ファイルダウンロードは出来ましたが、画面遷移が出来ませんでした。(<−これは当然の結果なのでしょうか?) また、以下のような記述だとネスケなら問題なく動くのですが、IEだと マクロが2回起動してしまいます。しかも2回目は読み取り専用になっていました。 <script language="JavaScript"> window.document.location.href='http://window.location.host/macro/aaa.xls'; </script> そして以下のようにダウンロードさせるようにしたところ、 今度は画面遷移が出来ません。 Content-type: application/octet-stream; Content-Disposition: attachment; filename=aaa.xls; 何か違う方法があるのか、または一回で"画面遷移"と"ダウンロード"を 行う事がダメなら、一度画面遷移した先に、ダウンロード用のアンカなり、 ボタンなりをつくって、処理を分けなければいけないのでしょうか? どうかご教授の程宜しくお願いします。 | ||||||||
|
投稿日時: 2007-11-13 21:29
JavaScriptではありませんが、METAでクライアント側からリダイレクトさせる方法ではいかがでしょう? 画面に表示したいHTMLの<head>に以下のようなタグを入れておくことにより、画面表示後、自動的に指定したURLに対してGET要求が発生します。 <META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://host/macro/aaa.xls"> ファイル保存のダイアログを出すのであれば、場合によりちょっと細工を(Content-typeの指定など)する必要があると思いますが、結果、画面表示とほぼ同時にファイルをダウンローしているように見えると思います。 | ||||||||
|
投稿日時: 2007-11-13 23:58
GENZOさん、お返事ありがとうございます。
なるほど!明日早速試してみます。
これはファイル保存のダイアログを出す場合、 Content-type: application/octet-stream;だと問題があるという事でしょうか? | ||||||||
|
投稿日時: 2007-11-14 00:08
Webアプリケーションってのは、基本的にRequestとそれに対するResponseで成り立っています。
別画面に遷移する、というのは、「別画面に遷移」というRequestに対して、別画面のHTMLがResponseとして帰ってくることです。 Content-typeを書き換えてExcelをダウンロードさせる、ということは、ResponseがまるごとExcelファイルになるので、HTMLとしてのResponseは帰ってきません。画面遷移ができないのはそのためです。 最も簡単な方法は、Excelダウンロード用の画面をwindow.openで開き、かつ親画面は別画面に遷移させる、という方法ですが、これだと真っ白い子画面が残ってしまいます。 それが嫌なら、発想を変えて、「画面遷移ができない」というのを逆に利用しましょう。つまり、遷移先画面のonloadで遷移先画面をダウンロード用のcgiに遷移させてやるのです。 | ||||||||
|
投稿日時: 2007-11-14 00:16
いいえそれでOKです。というかそういう指定をする必要があるよということが言いたかっただけなんです。紛らわしかったですね。 | ||||||||
|
投稿日時: 2007-11-14 00:24
ぼのぼのさん、お返事ありがとうございます。
そういう事だったんですか、勉強になりました。
つまりonloadイベントでjavascriptの関数に渡して、その中で 改めてsubmitさせるという認識で合ってますか? これならうまくいきそうですね。 GENZOさんに教えて頂いた方法とぼのぼのさんに教えて頂いた方法、 明日両方試してみます。 ありがとうございます! | ||||||||
|
投稿日時: 2007-11-14 00:31
GENZOさん、お返事ありがとうございます。
GENZOさんに教えて頂いたことも、ぼのぼのさんに教えて頂いた事も 全く考えもつきませんでした。無知でしかも頭が堅すぎますね・・・。 明日、試してみてまた結果報告します。 ありがとうございました。 | ||||||||
|
投稿日時: 2007-11-14 11:45
問題が8割くらい解決しました。
ぼのぼのさんに教えて頂いた方法を試してみたところ、画面の上に 「セキュリティ保護のため、このサイトによる、このコンピュータへのファイルの ダウンロードがInternet Explorerによりブロックされました。 オプションを表示するには、ここをクリックしてください」という情報バーが 出て、これを許可しないとダウンロードのダイアログが表示出来ません。 どのようにすれば、ブロックしないように出来ますか? インタネットオプションの設定とかではなく、プログラム内部でやりたいです。 |
1|2|3
次のページへ»