- PR -

ファイルダウンロードと画面更新を同時に行う方法?

投稿者投稿内容
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-11-14 12:55
引用:

どのようにすれば、ブロックしないように出来ますか?
インタネットオプションの設定とかではなく、プログラム内部でやりたいです。


できないです。
はやし
常連さん
会議室デビュー日: 2007/10/31
投稿数: 23
投稿日時: 2007-11-14 13:00
かつのりさん、お返事有難うございます。
引用:

かつのりさんの書き込み (2007-11-14 12:55) より:
できないです。



そうですか・・・。
他の方法も試してみます。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-14 18:57
引用:
どのようにすれば、ブロックしないように出来ますか?

どういうときにブロックされるかは
「ユーザーのマウス クリックまたはキーの押下によってナビゲーションが開始されなかったとき」、
どうすればブロックされないかは
「ユーザーの直接的なアクションの結果で実行されるようにしてください」とここに書いてあります。
だからダウンロードが、リンククリックとかボタンクリックによるPOSTやGETの(直接の)結果
じゃないとだめってことでしょうね。javascriptだとユーザーが望まなくても
ダイアログでちゃう可能性があるからそういうのはダメってことでしょうね。

ということで、ダウンロードじゃない方(遷移の方)をjavascriptで行う用に細工してみました。
コード:
<a onclick="location.href='Default.aspx';" type='application/octet-stream' 
target="_blank" href='test.xls' >テスト</a>

当方ではこれでうまくいってるようにみえます。
タイミング的にたまたまできてるだけかもしれないのでよ〜〜〜〜〜くテストしてください。

#IEでマルチパートレスポンス(?)ができればいいのに。
はやし
常連さん
会議室デビュー日: 2007/10/31
投稿数: 23
投稿日時: 2007-11-15 01:56
べるさん、お返事ありがとうございます。

引用:

べるさんの書き込み (2007-11-14 18:57) より:
だからダウンロードが、リンククリックとかボタンクリックによるPOSTやGETの(直接の)結果
じゃないとだめってことでしょうね。javascriptだとユーザーが望まなくても
ダイアログでちゃう可能性があるからそういうのはダメってことでしょうね。


なるほど、onloadイベントからsubmitを飛ばすのは直接の結果ではないから
ブロックされてしまうのですね。

引用:

べるさんの書き込み (2007-11-14 18:57) より:
ということで、ダウンロードじゃない方(遷移の方)をjavascriptで行う用に細工してみました。
コード:
<a onclick="location.href='Default.aspx';" type='application/octet-stream' 
target="_blank" href='test.xls' >テスト</a>

当方ではこれでうまくいってるようにみえます。


'Default.aspx'ってどういう意味があるのでしょうか?
調べてみたのですが、答えに辿り着けませんでした。

target="_blank"という事は、新しくブラウザを立ち上げるんですよね?
べるさんのようにするとどんな風に動くのでしょうか?
画面上のアンカをクリックすると、現在表示中のブラウザは画面遷移し、
かつ別ブラウザが立ち上がってダウンロードダイアログが表示される
という感じですか?
ちょっと動作のイメージがつかめないので、申し訳ないのですが
もう少し詳しく教えて頂けないでしょうか?

GENZOさんへ
GENZOさんに教えて頂いた方法を試そうと、いざHTMLファイルを作成
しようとしたところ、恥ずかしながらContent-typeの指定等の具体的な記述の仕方が
よくわかりませんでした。
調べてみたのですが、「Content-type」とかの単語で検索しても、
なかなか参考になるサイトが見つかりませんでした。
サンプルコードなどが載っているサイトなど教えて頂けないでしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-15 11:22
引用:
はやしさんの書き込み (2007-11-13 20:04) より:
こんばんは、はやしです。

CGIで、

今気づきましたが.NETの話ではないのですかね。だと一応板違いです。

引用:
'Default.aspx'ってどういう意味があるのでしょうか?

ごめんなさいこれは例です。ここに書くのははやしさんのおっしゃる「違う画面」のurlです。

引用:
target="_blank"という事は、新しくブラウザを立ち上げるんですよね?
べるさんのようにするとどんな風に動くのでしょうか?
画面上のアンカをクリックすると、現在表示中のブラウザは画面遷移し、
かつ別ブラウザが立ち上がってダウンロードダイアログが表示される
という感じですか?

はい。_blankとかにしないと自windowでファイルダウンロードのレスポンスを受けてしまうため
onclickのjavascriptが動かないです。ダウンロードダイアログ表示中は背後に新規windowが
表示されてしまいますがこれはしょうがないかなあと。

引用:
ちょっと動作のイメージがつかめないので、申し訳ないのですが
もう少し詳しく教えて頂けないでしょうか?

適当な遷移先とexcelファイルさえ用意すれば私が提示した<a>タグをhtmlに書くだけで
試せることなので実際に動きを見てみるのがいいと思います。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2007-11-15 12:33
引用:

はやしさんの書き込み (2007-11-15 01:56) より:
GENZOさんに教えて頂いた方法を試そうと、いざHTMLファイルを作成
しようとしたところ、恥ずかしながらContent-typeの指定等の具体的な記述の仕方が
よくわかりませんでした。
調べてみたのですが、「Content-type」とかの単語で検索しても、
なかなか参考になるサイトが見つかりませんでした。
サンプルコードなどが載っているサイトなど教えて頂けないでしょうか?



・・・私も.NETでは無いことに今気づきました。

私の提示しました例がよくなかったのですが、ファイルをダウンロードさせる際、何かしら仲介するモノが必要になります。具体的には以下のような感じです。

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://host/cgi/hoge.cgi?file=aaa.xls">

hoge.cgiでは
 ・Content-type: application/octet-streamを指定する
 ・GET引数のファイルをレスポンスとして出力する
です。これは言うまでもなかったですね。

この方式をとっても「セキュリティ保護のため・・・」は出てしまうと思います。
はやし
常連さん
会議室デビュー日: 2007/10/31
投稿数: 23
投稿日時: 2007-11-16 02:01
べるさん、GENZOさん、お返事ありがとうございます。
引用:

べるさんの書き込み (2007-11-15 11:22) より:
今気づきましたが.NETの話ではないのですかね。だと一応板違いです。


そうですよね、違うなと思いつつ、どの会議室に投稿するのが正しいのか
わからず、前回に投稿したスレ同様、ここに投稿してしまいました・・・。
紛らわしい事をして申し訳ありませんでした、以降気を付けます。

引用:

べるさんの書き込み (2007-11-15 11:22) より:
_blankとかにしないと自windowでファイルダウンロードのレスポンスを受けてしまうため
onclickのjavascriptが動かないです。ダウンロードダイアログ表示中は背後に新規windowが
表示されてしまいますがこれはしょうがないかなあと。
適当な遷移先とexcelファイルさえ用意すれば私が提示した<a>タグをhtmlに書くだけで
試せることなので実際に動きを見てみるのがいいと思います。


べるさんに教えて頂いた方法を試してみたところ、EXCELファイルのマクロが2回
起動してしまいました。ちょうど、以下のコードで書いていた時と同じ現象です。
コード:
<script language="JavaScript"> 
window.document.location.href='http://window.location.host/macro/aaa.xls';



何かやり方間違えてるんでしょうか・・・。
でもやはり別ウィンドウが出ると、見た目的に少し違和感がありますね。

GENZOさんへ
引用:

GENZOさんの書き込み (2007-11-15 12:33) より:
この方式をとっても「セキュリティ保護のため・・・」は出てしまうと思います。


そうですか・・・現在のところは、最初にぼのぼのさんに教えて頂いたやり方を
使用していますが、GENZOさんに教えて頂いた方法でも同じになってしまうわけですね。

これはあくまでも最終手段としてですが、この際仕様を変えて、
遷移先画面にボタンをつくって、ユーザが直接ダウンロードをするように
しようかと考えています。(お客さんが納得すればですが)
でも、もう少し考えて調べてからにします。

GENZOさん、ぼのぼのさん、かつのりさん、べるさん、
色々なアドバイスありがとうございました。
元々の問題の解決にはまだ至っていませんが、とても勉強になりました。

また、問題が解決しましたらその旨をご報告させて頂きます。


べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-16 11:31
引用:
そうですよね、違うなと思いつつ、どの会議室に投稿するのが正しいのか
わからず、前回に投稿したスレ同様、ここに投稿してしまいました・・・。
紛らわしい事をして申し訳ありませんでした、以降気を付けます。

いや、板違いと書きましたが、じゃあどこが妥当かというのは私もわかりません。
。。。リッチクライアントかなぁ。。

引用:
べるさんに教えて頂いた方法を試してみたところ、EXCELファイルのマクロが2回
起動してしまいました。ちょうど、以下のコードで書いていた時と同じ現象です。
コード:
<script language="JavaScript"> 
window.document.location.href='http://window.location.host/macro/aaa.xls';


ん、保存じゃなくて開くことを想定しているのですか。私のところではどちらのコードでも
開始時マクロは1回しか実行されませんでした。別の問題ですかね。
普通に開いて2回実行されたりしませんよね。

引用:
これはあくまでも最終手段としてですが、この際仕様を変えて、
遷移先画面にボタンをつくって、ユーザが直接ダウンロードをするように
しようかと考えています。(お客さんが納得すればですが)

これが一番平和だと思います。新たなバグの温床も減りますし。

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