Arrière-plan:
Je veux faire une "application" qui utilise JavaScript/HTML seulement et peut être ouvert par un navigateur, directement à partir du système de fichiers. Cette application doit être en mesure de lire les données à partir d'un autre fichier. Je vais ensuite utiliser JS pour analyser et afficher les pages. Comme un exemple simplifié, imaginez que j'ai un fichier CSV (à télécharger ici):
Mark Rodgers,mark.rodgers@company.com,Accounting
[...]
Melissa Jones,melissa@company.com,CEO
Je veux être en mesure de lire le fichier à l'aide de JS et de l'utilisation des données pour générer ma page.
Ce que j'ai accompli jusqu'à présent:
Démo (clic droit -> "Enregistrer sous" pour enregistrer le code HTML de votre ordinateur). Il est également disponible sur jsfiddle en semi-cassé de la mode (mise en page est cassé, mais il devrait encore être fonctionnellement correct).
Faites simplement glisser et déposez le fichier texte CSV dans le glisser-déposer la boîte, ou sélectionnez le fichier texte en utilisant le menu fichier, et JavaScript, lire, analyser le fichier et remplir le tableau.
Ceci repose sur la FileReader API; la plupart de la gros du travail est fait par cette fonction:
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>';
}
}
C'est presque OK, mais il des inconvénients à l'utilisateur manuellement chargement d'un fichier. Idéalement, il devrait être en mesure de charger automatiquement, mais pour des raisons de sécurité, aucun navigateur n'autorise... pour l'instant.
Exigences De La Solution:
Doit travailler en mode hors connexion, c'est à dire: il ne peut pas compter sur un service en ligne. Cela inclut également les serveurs HTTP exécute sur l'ordinateur local. L'idée est d'avoir cet exécuter sur n'importe quel ordinateur avec un navigateur installé.
Doit fonctionner quand la page est ouverte à l'aide de l'
file:///
protocole (c'est à dire: une page HTML sur le disque dur).Devrait pas compter sur des tiers add-ons (par exemple: Flash, Java, frémit ActiveX). Je suis assez certain que ce ne serait probablement pas travailler de toute façon si la page est en
file:///
Il doit être capable d'accepter l'arbitraire de données. Cela exclut le chargement d'un fichier dans un bien comportés format prêt à la consommation comme JSON.
Si cela fonctionne sur soit (idéalement deux) Firefox ou Chrome, c'est la fin. C'est aussi OK pour s'appuient sur les expériences des Api
Je sais ce que le nom de fichier est à l'avance, de sorte qu'il pourrait être codée dans le code HTML lui-même. Toute solution qui me permet de lire un fichier à partir du disque est très bien, il n'a pas à utiliser le FileReader API.
Donc si il y a un piratage intelligent pour charger un fichier dans une page qui est très bien aussi (peut-être charger dans une iframe invisible, et ont JS récupérer le contenu); c'est aussi OK.