2017-08

スポンサーサイト

このエントリーをはてなブックマークに追加
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JavaScriptから文字列をファイルに保存させる方法 まとめ

このエントリーをはてなブックマークに追加
2011/4/30 現在の情報なので、その後変わっている可能性もあります。
JavaScript から文字列をファイルに保存させる方法ですが、基本的に簡単な方法ではできません。

File API:Writer という仕様も出来ましたが、これは不十分です。
なぜなら、保存させるファイル名を決める方法が無いからです。
普通は「ファイル名を付けて保存」ダイアログを表示 → ファイル名を取得 → 指定されたパスにファイルを保存、とかやりたいところですが、File API上でこれをやる方法がありません。
一歩妥協して、input type='file' タグから指定されたファイルと同じ場所にちょっと名前を変えて保存するという方法も考えられますが、input type='file'タグでは、指定されたファイルのフルパスを取得することが出来ない(ファイル名は取得できる)ので、これも使えません。
指定されたファイルのフルパスについては、IEの場合はセキュリティ設定を変更することにより取得することは出来ます。ただ、セキュリティを甘い方向に持って行かせるので好ましくないのと、クロスブラウザ対応を考えるなら出来ないと考えた方がいいでしょう。
というわけで、他の方法を考えるわけですが、以下のような方法が考えられます。

1. POSTで送られた文字列をそのまま帰すCGIを置いてJavaScriptからそこにアクセスする
方法としては一番確実ですが、CGIをどこかに設置する必要があります。

2. window.execCommand('saveAs') とiframe を組み合わせる(IE限定)
サンプルを置きました。
場合によってはActiveXスクリプトうんぬん言われますが、それを許可させれば動きます。
クロスブラウザうんぬん言っておきながらこの例を出すのも変ですが、一番想定した挙動に近いので紹介しました。

3. dataスキームを使う
data:octet/stream で始まる文字列をlocation.href (つまりはアドレスバー)に渡すと、ダウンロードのダイアログを開かせることが出来ます。ただ、これはファイル名をブラウザが勝手に付けてしまう、IEだと動かない(アドレスバーからのdataスキーム呼び出しを許してない)などの問題があるので注意が必要です(参考PDF

4. 埋め込みFLASHを使ってダウンロードさせる。
FLASHを埋め込んで、JavaScriptと連携させて保存させるという方法があるそうです。
これがクロスブラウザ的には良いのですが、ダウンロードさせる時に画像を用意しなくてはいけない(画像の下にあるswfをクリックさせるイベントを用意する)のでホームページのデザインに制約が出来てしまうのが難点です。

と長々と紹介してきましたが、File API:Writer でファイル名を決める方法がわかれば、保存させる方法については、IEではexecCommand、それ以外ではFile APIみたいな使いわけで十分な気もします。
今後の発展次第でしょうか。
関連記事
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://fantakeshi.blog50.fc2.com/tb.php/7-557a0701
この記事にトラックバックする(FC2ブログユーザー)

«  | ホーム |  »

プロフィール

fantakeshi

Author:fantakeshi
Web:ここ
Twitter ID:fantakeshi
自作物やプログラムやまとまった技術的メモについて

RSSに追加

自作物

最新記事

Twitter

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

自作物 (26)
一般 (1)
将棋 (12)
BONANZA (1)
ponanza (1)
HTML5 (2)
Chrome (1)
WebAPI (1)
Webサイト (2)
プログラム (2)
Tips (1)

カウンター

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。