バックグラウンド:
JavaScript/HTMLのみを使用し、ファイルシステムから直接ブラウザーで開くことができる「アプリ」を作成したいと考えています。このアプリは、別のファイルからデータを読み取れる必要があります。次に、JS を使用してそれを解析し、ページをレンダリングします。簡単な例として、CSV ファイル(ここからダウンロード)があるとします。
Mark Rodgers,mark.rodgers@company.com,Accounting
[...]
Melissa Jones,melissa@company.com,CEO
JS を使用してファイルを読み取り、その中のデータを使用してページを生成できるようにしたいと考えています。
これまでに達成したこと:
デモ(右クリック -> [名前を付けて保存] で HTML をコンピューターに保存します)。また、 jsfiddleでも半壊れた方法で利用できます (レイアウトは壊れていますが、機能的には正しいはずです)。
CSV テキスト ファイルをドラッグ アンド ドロップ ボックスにドラッグ アンド ドロップするか、ファイル メニューを使用してテキスト ファイルを選択するだけで、JavaScript がファイルを読み取って解析し、テーブルに入力します。
これは FileReader API に依存しています。面倒な作業のほとんどは、この関数によって行われます。
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.target.files || evt.dataTransfer.files; // FileList object.
var file = files[0];
// this creates the FileReader and reads stuff as text
var fr = new FileReader();
fr.onload = parse;
fr.readAsText(file);
// this is the function that actually parses the file
// and populates the table
function parse()
{
var table = document.getElementById('emps');
var employees = fr.result.split('\n'); var c = 0;
for (var i in employees)
{
var employee = employees[i].split(',');
if (employee.length == 3)
{
var row = document.createElement('tr');
row.innerHTML = "<td>" + employee.join("</td><td>") + "</td>";
table.appendChild(row);
c++;
}
}
document.getElementById('result').innerHTML = '<span>Added ' + c + ' employees from file: ' + file.name + '</span>';
}
}
これはほとんど問題ありませんが、ユーザーが手動でファイルをロードするのは不便です。理想的には、自動的にロードできるはずですが、セキュリティ上の理由から、それを許可するブラウザーはありません... まだ.
ソリューション要件:
オフラインで作業する必要があります。つまり、どのオンライン サービスにも依存できません。これには、ローカル マシンで実行されている HTTP サーバーも含まれます。アイデアは、ブラウザがインストールされているだけの任意のコンピューターでこれを実行することです。
プロトコルを使用してページを開いたときに機能する必要があり
file:///
ます (つまり、ハード ドライブ上の HTML ページ)。サード パーティのアドオン (例: Flash、Java、震える ActiveX) に依存しないでください。ページが
file:///
任意のデータを受け入れることができなければなりません。これにより、JSON のようにすぐに使用できる適切な形式でファイルをロードすることが除外されます。
Firefox または Chrome のいずれか (理想的には両方) で動作する場合は問題ありません。実験的な API に依存することもできます
ファイル名は事前にわかっているので、HTML 自体にコーディングできます。ディスクからファイルを読み取ることができるソリューションであれば問題ありません。FileReader API を使用する必要はありません。
したがって、ファイルをページにロードするための巧妙なハックがあれば、それも問題ありません (目に見えない iframe にロードして、JS にコンテンツを取得させることができます)。それもOKです。