JavaScriptでダウンロード可能なページを作成中の疑問

このQ&Aのポイント
  • JavaScriptを使用してダウンロード可能なページを作成していますが、ダウンロードの順番に関する問題に遭遇しました。
  • 「download」ボタンを押すと、1つ目のファイルがダウンロードされる仕組みを構築したいのですが、2つのファイルが同時にダウンロードダイアログが表示されてしまいます。
  • 実現したいのは、1つ目のダウンロードが完了した後に、2つ目のダウンロードダイアログを表示させることです。どのようにプログラムを変更すればよいでしょうか?
回答を見る
  • ベストアンサー

javascriptでダウンロードできるページを作成中なのですが、ちょ

javascriptでダウンロードできるページを作成中なのですが、ちょっとわからないことが、もしわかる方がいらっしゃいましたら、教えてください。 「download」ボタンを押したらファイルをダウンロードさせたいのですが、まず1つ目のダウンロードが終了したら、次のファイルのダウンロードダイアログを表示させたいのです。○○秒後に処理させるのではなく、ダウンロード完了後に処理するようにしたいです。 とりあえず以下のようなプログラムを作成してみたのですが、以下のままだと、2つ同時にダウンロードダイアログが表示されます。 よろしくお願いします。 <html> <head><title>ダウンロード</title> </head> <body> <script type="text/javascript"> var down; function download(){ down = window.open("http://・・・/a.zip","a"); down = window.open("http://・・・/b.zip","b"); } </script> <button onclick="download()">download</button><br> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.4

>> #3 さん > XHR(など)では「保存」ができないと思いますが。。。 質問者さんの要件と異なるのは理解しています。 #2 はXHRでダウンロード完了した時に 「ダウンロード完了しました。下記リンクをクリックして a.zip を保存してください。」 のようなメッセージを表示してはどうか、という代替案です。 XHRでダウンロードすればキャッシュされるので、 <a href="http://example.com/a.zip">http://example.com/a.zip</a> をクリックすればキャッシュから保存するだろうという見込み。(未検証なので期待通りに動作するという確信はありませんが…。) ファイルの保存ダイアログから先はブラウザが制御しているので、JavaScript制御にするならどこかで妥協する必要があると考えています。 Firefox, Google Chrome など各々のブラウザの拡張を書いて公開してもいいのかもしれませんが、それだとブラウザを選んでしまいますしメンテも大変ですので…。 # Comet とか WebSocket とか使えば、ダウンロード完了を検知する仕組みが作れるのかもしれませんが詳しくないので省略。

e_honda
質問者

お礼

お礼が遅くなり申し訳ありません。 いろいろと考えた結果、順番にダウンロードではなくまとめて圧縮してダウンロードさせるようにしました。 回答していただき、ありがとうごいました。

その他の回答 (3)

回答No.3

>No.2 この場合の「ダウンロード」は狭義の「ダウンロード」ではなく、広義のダウンロードではないでしょうか。 XHR(など)では「保存」ができないと思いますが。。。

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

発想を変えて、XHR で a.zip をダウンロードし、ダウンロード完了後に a.zip へのリンクを表示してみてはどうでしょうか? XMLHttpRequest http://www.w3.org/TR/XMLHttpRequest/ XMLHttpRequest - MDC https://developer.mozilla.org/ja/XMLHttpRequest XMLHttpRequest の利用 - MDC https://dev.mozilla.jp/localmdc/developer.mozilla.org/ja/using_xmlhttprequest.html

回答No.1

ダウンロードの状況をHTMLやJavaScriptで調べることは出来ません。 1つの考え方として、 サーバー側で何バイトのファイルを何バイト送信したか、と言うのをAjaxで受け取れば、ダウンロード完了を調べることは可能だと思います。 (アップロード状況を表示するCGIの逆バージョンです) ですが、CGIではネットワークバッファの内容を調べることが出来ませんので、 (nph-CGIでも、ネットワークのバッファリングまでは制御できないと思います。) サーバーソフトを作らないと行けないかもしれません。(Apacheモジュールではなく、Apacheを作る感じで。)

e_honda
質問者

お礼

お礼が遅くなり申し訳ありません。 回答していただき、ありがとうごいました。

関連するQ&A

  • javascriptでのエラーについて

    Windows7+IE8にて以下の処理を行いたいのですが、 ================================================== (1) 親ウィンドウ(oya_window.html)から、【window.open】にて   子ウィンドウ(ko_window.html)を開く (2) 子ウィンドウ(ko_window.html)の【window.opener】にて   親ウィンドウ(oya_window.html)に定義されている   【window.open】を実行する関数[openWindow]を呼び出し、   Yahooページを開く ================================================== (2)の部分で以下のエラーとなり、Yahooページを開く事ができません。 --------------------------------------------------------- このWebページのエラーにより、正しく機能しない場合があります。 --------------------------------------------------------- タグが無効です。 oya_window.html   ライン:10 コード:0      文字:5 --------------------------------------------------------- 同マシン(Windows7)のfirefoxでは問題なく処理が行えるため、IEの 何らかの設定に起因していると思うのですが、IEの何の設定に起因して いるのかわからず、困っています。 何か情報をお持ちの方いらっしゃいましたら、よろしくお願いします。 【その他情報】 ○IEをアドオンなしで起動しても同エラーが発生することから、IEの  アドオンによる影響ではないと思われます。 ○以下の処理は問題なく実行できます。  ▼パターンA  ==================================================  (1) 親ウィンドウ(oya_window2.html)から、【window.open】にて    子ウィンドウ(ko_window2.html)を開く  (2) 子ウィンドウ(ko_window2.html)にて(元々親ウィンドウ    (oya_window.html)に定義していた)【window.open】を実行する    関数[openWindow]を呼び出し、Yahooページを開く  ==================================================  ▼パターンB  ==================================================  (1) 親ウィンドウ(oya_window3.html)から、【window.open】にて    子ウィンドウ(ko_window3.html)を開く  (2) 子ウィンドウ(ko_window3.html)の【window.opener】にて    親ウィンドウ(oya_window.html)に定義されている    【document.bgColor】を実行する関数[changeColor]を呼び出し    親ウィンドウの背景色を灰色に変更する  ================================================== 【ソース】 ▼本来のパターン ==親ウィンドウ(oya_window.html)=================== <HTML> <HEAD> <TITLE>親ウィンドウ </TITLE> <script language="Javascript"> function koopen(){ window.open("ko_window.html","ko_window","status=yes,width=800,height=100"); } function openWindow(){ window.open("http://yahoo.co.jp","",""); } </script> </HEAD> <BODY> <a href="JavaScript:koopen();">子ウインドウを開く</a> </BODY> </HTML> ================================================== ==子ウィンドウ(ko_window.html)=================== <HTML> <HEAD> <TITLE>子ウィンドウ </TITLE> <script language="Javascript"> function helpop(){ window.opener.openWindow(); } </script> </HEAD> <BODY> <a href = "JavaScript:helpop();">Yahooページを開く</a> </BODY> </HTML> ================================================== ▼パターンA ==親ウィンドウ(oya_window2.html)=================== <HTML> <HEAD> <TITLE>親ウィンドウ </TITLE> <script language="Javascript"> function koopen(){ window.open("ko_window2.html","ko_window","status=yes,width=800,height=100"); } </script> </HEAD> <BODY> <a href="JavaScript:koopen();">子ウインドウを開く</a> </BODY> </HTML> ================================================== ==子ウィンドウ(ko_window2.html)=================== <HTML> <HEAD> <TITLE>子ウィンドウ </TITLE> <script language="Javascript"> function helpop(){ window.opener.window.open("http://yahoo.co.jp","",""); } </script> </HEAD> <BODY> <a href = "JavaScript:helpop();">Yahooページを開く</a> </BODY> </HTML> ================================================== ▼パターンB ==親ウィンドウ(oya_window3.html)=================== <HTML> <HEAD> <TITLE>親ウィンドウ </TITLE> <script language="Javascript"> function koopen(){ window.open("ko_window3.html","ko_window","status=yes,width=800,height=100"); } function changeColor(){ document.bgColor="CCCCCC"; } </script> </HEAD> <BODY> <a href="JavaScript:koopen();">子ウインドウを開く</a> </BODY> </HTML> ================================================== ==子ウィンドウ(ko_window3.html)=================== <HTML> <HEAD> <TITLE>子ウィンドウ </TITLE> <script language="Javascript"> function helpop(){ window.opener.changeColor(); } </script> </HEAD> <BODY> <a href = "JavaScript:helpop();">親ウィンドウの色を変える</a> </BODY> </HTML> ==================================================

  • dummyページを一瞬で開き、閉じるjavascriot

    例えば、あるページを開いたときにサブウィンドウで yahooを開き、そのあとすぐにそのサブウィンドウ(yahoo)を 閉じる処理を行いたいのですが、うまくいきません。 ちなみに、以下のように記述しました。 <html> <head> <title></title> <script language="JavaScript"> <!-- function Dummy_Window() { window.open("http://www.yahoo.co.jp","window1","width=400,height=80"); window.close("http://www.yahoo.co.jp","window1"); } // --> </SCRIPT> </head> <body onload="Dummy_Window();"> </body> </html>

  • JavaScriptについてご教授願います。

    お世話になります。 JavaScriptについてご教授願います。 main.html ----------------------------------------------------------- <HTML> <HEAD> </head> <body> <INPUT TYPE=BUTTON value="閉じる" onClick="CloseWin()"> </body> </html> ----------------------------------------------------------- kozin.html ----------------------------------------------------------- <HTML> <HEAD> <script language="JavaScript"> function CloseWin(){ window.close(); } </script> </head> <body> 個人情報 </body> </html> ----------------------------------------------------------- 実現したいことはmain.htmlのボタンを押下することによって kozin.htmlの画面を閉じるということです。 お手数をお掛け致しますがどうぞよろしくお願いいたします。

  • JavaScriptの表示についておねがいします。

    JavaScriptで、以下のスプリクトのページを表示する部分を10秒ごとにしたいのですがどなたか教えて頂けないでしょうか?出来れば、追記して回答お願いします。 <html> <body> </scr ipt> </head> <body onLoad="openWindow1()"> <a href="javascript:openWindow1();">web表示</a> <SCRIPT language="JavaScript"> <!-- // サブウィンドウの表示方法を指定する function openWindow1() { window.open("http://yahoo.co.jp/","1"); window.open("http://www.google.co.jp/","2"); window.open("http://ja.wikipedia.org/wiki/メインページ","3"); } //--> </SCRIPT> </body> </html>

  • いくつものJavaScriptは使えませんか?

    ひとつのHTMLにいくつかのJavaScriptを入れています。ひとつは</HEAD>のまえに外部ファイルを呼び出す形で <SCRIPT LANGUAGE="javascript"src="script/css.js"> </SCRIPT></HEAD> このような形。 そのほか<BODY>~</BODY>の間に<SCRIPT LANGUAGE="JavaScript">~</SCRIPT>という形で、日付表示とお気に入り登録を入れています。 この二つと外部ファイルの呼び出しは作動するのですが、なぜかリンクをクリックして出させる小窓はぜんぜん表示されません(下記内容です) <script> //Popup Window Script //By JavaScript Kit (http://javascriptkit.com) //JavaScript tutorials and over 400+ free scripts function openpopup(){ var popurl="thankyou.htm" winpops=window.open(popurl,"","width=450,height=450,toolbar,") } </script> <a href="javascript:openpopup()">Click here to open window</a> この内容だけで、HTMLに貼り付けると うまくいのですが・・・・・(^^;

  • JavaScript内からJavaScriptを書き出したいのですが

    こんにちは. JavaアプレットとJavaScriptを利用してJavaScriptを書き出すコードを書いてみたのですが,うまく動きません.具体的なコードは以下のようで,リンクはできるのですが,マウスを乗せるとオブジェクトを指定してくださいとエラーがでます.innerHTMLでJavaScriptを書き出すことはできないのでしょうか? <html> ・・・ <body> <SCRIPT language="JavaScript" type="text/javascript"> <!-- function dWrite(){ str='<script type="text/javascript">functionLinkMo(){varLM1;LM1=window.open"","Doc","toolbar=no,location=no,kdirectories=no,width=300,height=250");LM1.document.write"<html><head><title></title></head><body>testです/body></html>");LM1.document.close();}</script><body>rinku <ahref="#"onMouseOver="LinkMo()">ここにのせると</a></body></html>'; document.getElementById("here").innerHTML=str;} //--> </script> <applet ・・・dWriteを呼び出す></applet> <div id="here" style="position:absolute;width:600px; left:0px;top:0px;"> </div></body></html>

  • javascriptの動的読み込みについて教えてください

    javascriptの動的読み込みについて教えてください いつもお世話になります。 jqueryを勉強中のものです。 少しややこしいのですが、 以下のmenu.htmlとmain.htmlを持ったframe.htmlで、メニューの試験ボタンを押してmain.htmlの<div id="target_id">にload.htmlを動的に読み込んだ時、loadされたhelloボタンが作動しません。 menu.htmlのtest()中のalert(data);でload.htmlの<script>が読み込まれていることは確認できるのですが・・何が原因でどこが悪いのでしょうか? よろしくご指導お願いします。 frame.html ----------------------------------------------------------- <html> <head> <title>Dynamic Load Test</title> </head> <frameset name="frame" cols="180,*"> <frame name="menu" src="menu.html"> <frame name="MainPanel" src="main.html"> </frameset> </html> ----------------------------------------------------------- menu.html ----------------------------------------------------------- <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"><!-- function test(){ jQuery.get("./load.html",function(data){ alert(data); $("#target_id",window.parent.MainPanel.document).html(data); }); } // --></script> </head> <body> <button onClick="test();">試験</button> </body> </html> ----------------------------------------------------------- main.html ----------------------------------------------------------- <html> <head> </head> <body> <h1>main.html</h1> </body> <div id="target_id"></div> </html> ----------------------------------------------------------- load.html ----------------------------------------------------------- <h1>load.html</h1> <script type="text/javascript"><!-- function hello(){ alert("こんにちわ"); } // --></script> <button onClick="hello();">hello</button> -----------------------------------------------------------

  • javascriptで別ウインドウを開いたのですが背景設置が上手くいきません。

    いつもお世話になっております。 JavaScriptを使用し別ウインドウで画像を表示させているのですが、 そのウインドウの背景が上手く設定できません。 どのように編集すればよいでしょうか? 現在の状態は以下の通りです。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>aaa</title> <script language="javascript"> <!-- function OpenWindow(){ var width = document.images['00'].width + 228; var height = document.images['00'].height +254; subWin = window.open("","subWin","status=no,menubar=no,toolbar=no,scrollbars=no,resizable=yes,screenX=0,screenY=0,width=" + width + ",height=" + height + '"'); with(subWin.document) { open(); write("<html><head><title>sample1</title></head>"); write("<body onload='window.resizeTo( document.images[00].width + 40,document.images[00].height + 120)'><div align='center'><img id='00' src='b/1b.jpg'><br>"); write("<button type='button' onclick='window.close()'>閉じる</button></body></div></html>"); close(); } } --> </script></head> 宜しくお願いします。

  • JavaScriptを使用したページなのですが

    JavaScriptを使って窓サイズ指定のwindowを開くページなのですが、 私のPCでは問題なく開けるのですが他の人のPCでは見れないという指摘を頂きました。 私が見ている環境はIE6・WindowsXP・セキュリティレベル中です。製作ソフトはDreamWeaverを使っています。 他の人の環境がいまいちよく分からないのですがJavaを使ったらどういった環境の人が見れなくなるのでしょうか? ちなみにそのページで使用したタグは <script language="JavaScript" type="text/JavaScript"> <!-- function MM_openBrWindow(theURL,winName,features) { //v2.0 window.open(theURL,winName,features); } //--> </script> が<head></head>に入っており<body></body> には <a href="javascript:;" onClick="MM_openBrWindow(profile.htm','prowin','scrollbars=yes,width=600px,height=600px')">です。 よろしくお願いします。

  • javascriptで印刷ダイアログを出力すると同時に

    javascriptで印刷ダイアログを出力すると同時に setTimeouで一定時間後にアラートを表示していたのですが、 IE8では印刷ダイアログが表示されている時はタイマーが止まってしまうようです。 また、IE6では動作しました。 なにか解決方法はないでしょうか? 以下がサンプルソースです。 <html> <head> <title>setTimeout</title> <script type="text/javascript"> function aaa() { alert("タイムアウトしました。"); } function func() { setTimeout("aaa()", 5000); window.print(); } </script> </head> <body onload="func()"> aaa </body> </html>

専門家に質問してみよう