Używanie lokalnego pliku jako źródła danych w JavaScript

Tło:

Chcę stworzyć „aplikację” wykorzystującą JavaScript / HTMLtylko i może zostać otwarty przez przeglądarkę bezpośrednio z systemu plików. Ta aplikacjamusi być w stanie odczytać dane z innego pliku. Następnie użyję JS do analizy i renderowania stron. Jako uproszczony przykład wyobraź sobie, że mam plik CSV(Pobierz tutaj):

Mark Rodgers,[email protected],Accounting
[...]
Melissa Jones,[email protected],CEO

Chcę móc odczytać plik za pomocą JS i użyć w nim danych do wygenerowania mojej strony.

Co do tej pory osiągnąłem:

Próbny (kliknij prawym przyciskiem myszy -> „Zapisz jako”, aby zapisać kod HTML na komputerze). Jest również dostępny najsfiddle w półprzerwany sposób (układ jest uszkodzony, ale nadal powinien być poprawny funkcjonalnie).

Wystarczy przeciągnąć i upuścić plik tekstowy CSV do okna przeciągania i upuszczania lub wybrać plik tekstowy za pomocą menu pliku, a JavaScript odczyta, przeanalizuje plik i zapełni tabelę.

Opiera się to na API FileReader; większość ciężkiego podnoszenia odbywa się za pomocą tej funkcji:

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>';
    }
}

To jestprawie OK, ale utrudnia użytkownikowi ręczne ładowanie pliku. Idealnie byłoby, gdyby był w stanie załadować go automatycznie, ale ze względów bezpieczeństwa żadna przeglądarka na to nie pozwoli ... jeszcze.

Wymagania dotyczące rozwiązania:

Musi pracować w trybie offline; tj .: nie może polegać na żadnej usłudze online. Obejmuje to również serwery HTTP działające na komputerze lokalnym. Chodzi o to, aby uruchomić to na dowolnym komputerze z zainstalowaną tylko przeglądarką.

Musi działać, gdy strona jest otwierana za pomocąfile:/// protokół (tj. strona HTML na dysku twardym).

Powiniennie polegaj na dodatkach innych firm (np .: Flash, Java,drży ActiveX). Jestem prawie pewien, że i tak nie zadziałałyby, gdyby strona byłafile:///

Musi być w stanie zaakceptowaćarbitralny dane. To wyklucza ładowanie pliku w dobrze zachowanym formacie, który jest gotowy do konsumpcji, taki jak JSON.

Jeśli działa na Firefox lub Chrome (najlepiej w obu), jest w porządku. Można również polegać na eksperymentalnych interfejsach API

Wiem, jaka jest wcześniej nazwa pliku, więc może być zakodowana w samym HTML.Każdy rozwiązanie, które pozwala mi odczytać plik z dysku, jest w porządku, nie musi korzystać z API FileReader.

Jeśli więc istnieje sprytny hack, aby załadować plik na stronę, która również jest w porządku (może załadować go do niewidocznej ramki iframe i pobrać JS z zawartości); w porządku też.

questionAnswers(6)

yourAnswerToTheQuestion