[解決済み】HTML5/JavaScriptでファイルを生成して保存する方法
質問
最近WebGLをいじっていて、Colladaリーダーを使えるようになりました。問題は、それがかなり遅いということです(Colladaは非常に冗長なフォーマットです)。私はすでにJavaScriptでファイルをパースするコードを持っているので、私のエクスポーターとしてそれを使うこともできるかもしれません。問題は保存です。
さて、ファイルを解析してその結果をサーバーに送信し、ブラウザがサーバーからファイルをダウンロードするように要求することができるのは分かっています。しかし、実際には、サーバーはこの特定の処理には何の関係もありません。では、なぜサーバーを関与させるのでしょうか?私はすでに目的のファイルの内容をメモリ上に持っている。純粋なJavaScriptを使って、ユーザーにダウンロードを提示する方法はないでしょうか?(私はそれを疑うが、同様に尋ねるかもしれない...)
そして、はっきりさせておきたいのは、ユーザーの知らないところでファイルシステムにアクセスしようとしているのではない、ということです。ユーザーはファイルを提供し(おそらくドラッグ&ドロップで)、スクリプトはメモリ内でファイルを変換し、ユーザーは結果をダウンロードするように促されます。これらはすべて、ブラウザに関する限り、安全な動作であるべきです。
[EDIT】です。] しかし、私がやっていることの一部は、純粋なHTML5で何ができるかを強調する試みです...ですから、私の場合、Flashはまさに除外されています。(とはいえ、本当のウェブアプリをやっている人には完全に有効な答えです。) そうなると、サーバーを巻き込みたくなければ、私は運が悪いようです。とにかくありがとうございます。
どのように解決するのですか?
MatthewとDennksterがそのオプションを指摘してくれたおかげで、data:URIを作成することは間違いなく私のためのトリックになります。以下は、基本的な方法です。
1) すべてのコンテンツを "content" という文字列に取得します (たとえば、最初にそこに作成するか、すでに構築されたページのタグの innerHTML を読み取ることによって)。
2) データURIを構築する。
uriContent = "data:application/octet-stream," + encodeURIComponent(content);
ブラウザの種類などによって長さの制限はありますが、例えばFirefox 3.6.12では最低でも256kまで動作します。encodeURIComponentを使わずにBase64でエンコードした方が効率的かもしれませんが、私にとってはそれでOKでした。
3) 新しいウィンドウを開き、このURIにリダイレクトしてください。
newWindow = window.open(uriContent, 'neuesDokument');
以上です。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] JavaScriptでページの一番上までスクロールする?
-
[解決済み] HTML5/Canvas/JavaScriptを使用してブラウザ内のスクリーンショットを撮影する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント