So laden Sie eine txt - /csv-Datei in javascript-string/array, während offline

Ich habe ein kleines html/javascript Webseite, ich will laufen in einem browser offline.

In der gleichen Weise kann die Seite mit einem Bild oder einer css-Datei und es verwenden, während Sie offline, ich möchte eine 3mb-Arbeitsblatt, das javascript liest in einem 2d-array, und ich bin der Hoffnung, für etwas, das funktionieren würde auf IE8 sowie modernen Browsern.

C:\Folder\index.html
C:\Folder\code.js
C:\Folder\picture.png
C:\Folder\spreadsheet.csv

Habe ich gefunden, mehrere Methoden online wie

<script src="jquery-csv.js"></script>
var table = $.csv.toArrays("spreadsheet.csv");

oder

d3.text('spreadsheet.csv', function(error, _data){
            var table = d3.csv.parseRows(_data);
        });

oder

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "data.txt",
        dataType: "text",
        success: function(data) {processData(data);}
     });
});

Aber ich Neige zu same-origin-policy Fehler wie:

XMLHttpRequest cannot load file://data.txt. Received an invalid response. Origin 'null' is therefore not allowed access.

Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match. 

Ich kann nicht scheinen, um diese offline zu arbeiten. Wie könnte ich dies erreichen?

Edit:

Ich bin geschafft, den folgenden arbeiten für eine text-Datei, die nur auf Firefox mit der CSVToArray Funktion gefunden hier, die ist ziemlich träge mit einer Datei dieser Größe, und eine versteckte iframe.

Letztlich wäre es wünschenswert, wenn dieser in der Lage war, läuft auf IE8, und wenn ich eine csv statt txt-Datei, aber es ist wenigstens ein Anfang.

<iframe style="display:none;" id='text' src = 'file.txt' onload='read_text_file()'>
</iframe>

<script type="text/javascript" >

function read_text_file() {
    var text = document.getElementById('text').contentDocument.body.firstChild.innerHTML;
    var table = CSVToArray(text); 
}

Für IE8 ich es geschafft, diese arbeiten auf einem kleinen Maßstab, aber mit der 3mb-Datei gelegentlich ein Absturz des Browsers und wird immer accost der Benutzer mit Tonnen von Warnmeldungen, die activex verwendet wird, und eine Welle von Warnungen, das Skript wird den computer verlangsamen.

    window.onLoad = readFileInIE("file.csv");

    function readFileInIE(filePath) {

        try {
            var fso = new ActiveXObject("Scripting.FileSystemObject");      
            var file = fso.OpenTextFile(filePath, true);                                    
            var text = file.ReadAll();  
            var table = CSVToArray(text);
            file.Close();

            return fileContent;
        } catch (e) {
            if (e.number == -2146827859) {
                alert('Unable to access local files due to browser security settings. ' + 
                    'To overcome this, go to Tools->Internet Options->Security->Custom Level. ' + 
                    'Find the setting for "Initialize and script ActiveX controls not marked as safe" and change it to "Enable" or "Prompt"'); 
            }
        }
    }
nicht sicher, aber maby html5 file oder jquery-offline.js kann hilft
Dies ist ein problem von lokale Datei-Zugriff in JavaScript
Sie können einfach hard-code, der CSV-versteckt in einer <textarea> - tag...
html5 IndexedDB könnte Ihre Probleme lösen -- Sie haben würde, um es zu laden in die IndexedDB und dann Lesen Sie es von dort anstelle von der Datei-System. Ich bin langsam versucht, um den übergang von der HTML5-File-System-API, die war entfernt von spec, Firefox Ansprüche alles, was getan werden kann, mit der veralteten (nur impleneted in Chrom) system getan werden kann, IndexedDB. Der file-system-api konnte hartnäckig sein musst, würde schauen müssen in es ein bisschen mehr mit der IndexedDB.

InformationsquelleAutor Charles Clayton | 2014-06-21

Schreibe einen Kommentar