我要特別強調使用JavaScript/HTML 只有,並且可以通過瀏覽器直接從文件系統中開設了一個「應用程序」。這個應用程序必須能夠從另一個文件讀取數據。然後我將使用JS來解析它並呈現頁面。作爲一個簡單的例子,假設我有一個CSV文件(download here):
Mark Rodgers,[email protected],Accounting
[...]
Melissa Jones,[email protected],CEO
我希望能夠用JS讀取該文件,並使用數據,它生成我的網頁。
我到目前爲止已經完成:
Demo(右鍵 - > 「另存爲」 將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>';
}
}
這是幾乎 OK,但不方便用戶進入手動加載文件。理想情況下,它應該能夠自動加載它,但出於安全原因,沒有瀏覽器會允許... ...。
解決方案的需求:
必須脫機工作;即:它不能依賴任何在線服務。這也包括在本地機器上運行的HTTP服務器。這個想法是隻在安裝了瀏覽器的情況下在任何計算機上運行。
當使用
file:///
協議(即:硬盤上的HTML頁面)打開頁面時必須工作。應該不依靠第三方附加功能(如:閃光,爪哇,發抖的ActiveX)。我很確定這些可能不會工作,如果頁面是
file:///
它必須能夠接受任意數據。這就排除了以一種行爲良好的格式加載文件,該文件已準備好像JSON一樣用於消費 。
如果它在任何一個(理想情況下都是)Firefox或Chrome上都可以使用,那很好。也可以依靠實驗API
我知道文件名是什麼,所以它可以在HTML本身編碼。任何解決方案,使我能夠從磁盤讀取文件是好的,它不必使用FileReader API。所以如果有一個聰明的黑客文件加載到一個頁面也可以(也許加載到一個不可見的iframe,並有JS檢索內容);這也沒關係。
在Chrome中,你應該以允許訪問指定命令行參數'--allow-文件訪問從-files' 'file://'方案。由於安全考慮,我不確定Chrome會以任何其他更方便的方式執行此操作。 – Stan
–
不確定,但node-webkit項目可能會讓您感興趣。 https://github.com/rogerwang/node-webkit –