Javascriptでのファイル保存について

このQ&Aのポイント
  • Javascriptを利用して変数に格納している値をローカルにダウンロードする仕組みについて考えています。
  • IEでは名前をつけて保存のダイアログ(子画面)を画面の中心に表示させたいです。方法を教えてください。
  • Firefox・Chromeではファイル名のデフォルト値を設定する方法について教えてください。
回答を見る
  • ベストアンサー

Javascriptでのファイル保存について

標題のように、Javascriptを利用して変数に格納している値(サーバとの通信を行わず)を ローカルにダウンロードできる仕組みを考えております。 対応させたいブラウザは、IE・Firefox・Chromeです。 IEは以下の方法で xx.execCommand("SaveAs",xxxx, xxxx.csv); Firefox・Chromeは以下の方法で location.href = "data:application/octet-stream,"+encodeURIComponent(xxxx); 質問1 IEでは、名前をつけて保存のダイアログ(子画面)を、画面の中心に表示させたいです。 alartやpromptは、位置の変更はできないと調べたらでてきたのですが 無理矢理実装する方法や、全く違う発想で実装する方法はないでしょうか。 (子画面を出す前に、親画面の位置をずらす方法は試してみましたが今一でした) 質問2 Firefox・Chromeでは、ファイル名のデフォルト値を設定できません。 こちらも調べた結果、出来ないという事でしたが、こちらも 無理矢理実装する方法や、全く違う発想で実装する方法はないでしょうか。 どうぞ、ご教授お願い致します。

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

  • ベストアンサー
  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

WHATWG標準仕様のa要素のdownload属性を利用すればできる ただし現在対応しているのはChromeのみだったかと思う でも標準仕様だからそのうち皆対応するとは思う TextDL("abcdefg","mytext") function TextDL(text,name){ //ファイルを作成 b=new Blob([text],{type:"text/plain"}) //a要素を作る a = document.createElement('a') //ダウンロードする名前をセット a.download = name; //ダウンロードするファイルをセット a.href = window.URL.createObjectURL(b) //イベントを作る e = document.createEvent('MouseEvent') e.initEvent("click",true,true) //a要素をクリック a.dispatchEvent(e) }

RYO-88
質問者

お礼

b0a0a 様 ありがとうございます。 Chromeで動かすことができました。 早くFirefoxも対応することを願いつつ、視野をもっと広げて対応方法を考えて見たいと思います。

その他の回答 (1)

回答No.1

ないよ。 ブラウザの機能使ってるだけだから

関連するQ&A

  • Google Chromeでのブックマーク表示位置

    最近Google Chromeに少し興味がありお試しでインストールしてみました。 そこで気になったのがブックマークの位置なのですが、 FireFoxやIEみたいに画面左端に表示する方法はないでしょうか? お解かりになる方がいましたら、よろしくお願いします。

  • JavaScriptで変更されたくない変数(定数)の書き方

    Javascriptで、変更されたくない変数(定数)を使いたいのですが、どうすれば良いのでしょうか? IE,FireFoxの両方で可能な方法が知りたいです。 できれば、Opera,Safari,Chromeも使えたら・・・ 無理でしょうか?

  • Javascriptで各ブラウザを厳密に区別する方法

    JsvascriptでIE,FireFox,Safari,Opera,Chromeのそれぞれのブラウザを厳密に区別する方法が知りたいです。 それが困難な場合はIE/FireFoxとその他のブラウザを区別する方法がわかれば構いません。 最近Javascriptを触っていませんが2008年後半から今までで何かJavascriptで変化したことはあるのでしょうか? 2007年はAjaxというものが出てきましたが、その後 目新しいものがあったでしょうか?それとも今は減少中?

  • Firefox,Operaで戻れないページを作りたい

    ログイン中は戻るボタンを有効としているWebシステムで(キャッシュを有効としています)ログアウト後は、ログイン画面から戻るボタンで戻れなくし、ログイン中に閲覧したページが見れないよう制御をしたいのですが、IE以外のブラウザでうまくいきません。 IEは、ログアウト画面に「window.location.href = "XXXX";」 を実装し制御できたのですが、Opera,Firefox,Safariではどのようにしたら制御できるでしょうか?

  • JavaScriptのsetTimeoutについて

    setTimeoutのタイマー処理の仕様を調べています。 var func = function () { alert(1); }; setTimeout(func, 1000); alert(2); このコードを実行した場合、alert(2)→alert(1)の順で処理されるのは当然ですが、 alert(2)を開いたまま1秒以上待ち、そこでOKボタンを押すとどうなるか、という問題です。 Firefoxの実装については下記ページで分かりました。 http://takoyakim.tumblr.com/post/10875885/firefox-settimeout 先ほどのコードの1000ミリ秒の経過処理は、タイマースレッドという専用スレッドで扱うため、 alert(2)で1000ミリ秒以上止めた後にOKボタンを押すと、即座にalert(1)が開きます。 しかしIEの場合はそうではなく、alert(2)を閉じてから約1000ミリ秒後にalert(1)が開きました。 alert(2)を開いたままどれだけ待機しても変わりません。 ChromeやSafariもIEと同じようです。 ですがこの結果は、次のコードの実行結果と矛盾してしまいました。 var heavyFunc = function () { for(var i = 0; i < 100000; i++) new Date(); } var startTime = +new Date(); var callCount = 0; var testFunc = function (x) { heavyFunc(); // (1) if (++callCount < 5) setTimeout(testFunc, 100); else alert(+new Date() - startTime); //heavyFunc(); // (2) }; testFunc(); heavyFuncという重い処理を、setTimeoutの前後のどちらに置くかという実験コードです。 setTimeoutのタイマー処理がFirefoxのように別スレッドで実行されているのであれば、 先にsetTimeoutを呼び出してからheavyFuncを実行した方が速く処理が完了するだろう、という想定です。 そして結果は、FirefoxだけでなくIEとChromeでも先にsetTimeoutを呼んだ方が速い、となりました。 結局どのブラウザも専用のタイマースレッドを実装しており、 alert関数が特殊(タイマースレッドもブロックする)なだけ、ということなのでしょうか? それとも私が何か見落としているのでしょうか。

  • ブラウザのタブで開いた各ページをpdfで一括保存

    したいと思っています。 PCでできれば、ブラウザはEdge, IE, chrome, firefox いずれでもかまいません。 プログラム(VBA等)・アプリなど、方法ご教示ください。 よろしくお願いします。

  • タスクバーボタンの並び順をピン留めせずに記憶/再現

    Windows7 プログラムをピン留めすることなしに、タスクバーボタンの並び順を予め指定した通りに自動配置させたい。 可能にする方法やツールがもしあったら教えて下さい。 【条件】 1)起動中ではないプログラムは表示させない。つまりピン留めはしない。 2)プログラム起動後に手動で並び替えるのではなく、起動すると予め決めた位置に自動的に収まって欲しい。 3)手動で並べ替えるとその順番を記憶してくれ、次回起動時にはその場所を再現。 4)ボタンの絶対的な位置ではなく、各プログラムごとの相対的な位置/順番で記憶して欲しい。 【例】 たとえば下記のように順番を記憶させておいた場合、 1. IE 2. Chrome 3. Firefox 4. その他、未指定のプログラム。 後からChromeを起動させても、自動的にIEとFirefoxの間にボタンが入ってほしい。 (IEが起動中ならChromeが2番めに入り、IEが未起動ならChromeが先頭に来る)

  • Google chromeの画面サイズが?

    最近、Google chromeを試しに入れてみたのですが 立ち上げるといつも、画面サイズが一回り小さく表示され 困っています。IEやFirefoxの時のようにCtrlボタンで覚えさせても 設定出来ません。chromeの方法をおしえて頂けませんか。 OSはXP SP3です。

  • javascriptによるウェブの印刷制御について

    javascript(jQuery),PHP,html,cssを使って、ウェブ上で動作するシステムを作っています。 表示された表を印刷する箇所で、レイアウトの調整をしております。 ブラウザはchromeがメインですが、できればIE、Firefoxでも動作できればと考えております。 以下について、教えてください。 ・印刷時の「余白の設定」と「縦位置・横位置の切り替え」は、プログラム側から制御できますでしょうか。  できる場合は、余白の数値設定等、その具体的な制御方法を教えてください。   ・印刷時に表示される「ヘッダーとフッター(ファイル名などが出るところ)」ですが、これをプログラム側から内容の変更や、表示・非表示を制御できますでしょうか。  できる場合は、テキストの設定方法等、その具体的な制御方法を教えてください。  以上、よろしくお願いいたします。

  • CSVダウンロードでウィンドウが出たままに

     親画面から子画面を表示させ、その子画面から、CSVダウンロードをさせることをやろうとしています。 下記のようなASPを子画面から呼んだところ、ダウンロードには成功しましたが、windowsXPではダウンロードのASPは閉じてくれるのですが、windows2000ではダウンロードのASPは表示されたまま(空白のウィンドウ)になってしまいました。 子画面ではJavaScriptでwindow.open("DL.asp","XXXX") とやっています。 -DL.asp-------------------------- Response.AddHeader "Content-Disposition", "attachment; filename=XXXX.csv" Response.ContentType = "application/octet-stream-dummy" Response.write "xxxx" Response.End --------------------------------- できれば、ダウンロード終了後には空白のウィンドウがでないようにしたいのですが、どうにかできないでしょうか。。。 どうにか対処できないでしょうか・・・

専門家に質問してみよう