XMLHttpRequest Herkunft null ist nicht zulässig Access-Control-Allow-Origin für file: /// zu file: /// (Serverless)

StackOverflow https://stackoverflow.com/questions/4208530

Frage

Ich versuche, eine Website zu erstellen, die lokal heruntergeladen und ausgeführt werden können durch seine Index-Datei zu starten.

Alle Dateien sind lokal, werden keine Ressourcen verwendet online.

Wenn ich versuche, das AJAXSLT Plugin zu verwenden, um jQuery eine XML-Datei mit einer XSL-Vorlage zu bearbeiten (in Unterverzeichnissen), erhalte ich folgende Fehler:

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/data/home.xml. Origin null is not allowed by Access-Control-Allow-Origin.

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/assets/xsl/main.xsl. Origin null is not allowed by Access-Control-Allow-Origin.

Die Indexdatei den die Anfrage ist file:///C:/path/to/XSL%20Website/index.html während der JavaScript verwendet, um Dateien in file:///C:/path/to/XSL%20Website/assets/js/ gespeichert werden.

Wie kann ich tun, um dieses Problem zu beheben?

War es hilfreich?

Lösung

Für Fälle, in denen einen lokalen Webserver ausgeführt wird keine Option ist, können Sie Chrome Zugriff auf file:// Dateien über einen Browser ermöglichen. Nach einigem Graben fand ich diese Diskussion , die eine Erwähnungen Browser-Schalter in der Öffnung Post. Führen Sie Ihre Chrome-Instanz mit:

chrome.exe --allow-file-access-from-files

Dies kann für Entwicklungsumgebungen akzeptabel sein, aber wenig anderes. Sie sicherlich nicht wollen, dass diese auf die ganze Zeit. Dies scheint immer noch eine offene Frage zu sein (Stand: Januar 2011).

Siehe auch: Probleme mit jQuery getJSON mit lokale Dateien in Chrome

Andere Tipps

Im Wesentlichen ist der einzige Weg, damit umzugehen ist ein Webserver auf localhost laufen zu lassen und sie dienen von dort aus.

Es ist unsicher für einen Browser einer Ajax-Anforderung für den Zugriff jeder Datei auf Ihrem Computer zu ermöglichen, damit die meisten Browser zu behandeln scheinen „file: //“ -Anfragen als keinen Ursprung für die Zwecke der „ Same Origin Policy "

einen Webserver starten so trivial, wie cding in das Verzeichnis können die Dateien in und ausgeführt werden:

python -m SimpleHTTPServer

Hier ist ein Applescript, die Chrome mit der --allow-file-access-from-Dateien Schalter eingeschaltet, für OSX / Chrome Devs da draußen starten werden:

set chromePath to POSIX path of "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"    
set switch to " --allow-file-access-from-files"
do shell script (quoted form of chromePath) & switch & " > /dev/null 2>&1 &"

Diese Lösung ermöglicht es Ihnen, ein lokales Skript zu laden jQuery.getScript () verwenden. Dies ist eine globale Einstellung, aber Sie können auch die domänenübergreifende Option auf einer Pro-Anfrage Basis eingestellt.

$.ajaxPrefilter( "json script", function( options ) {
  options.crossDomain = true;
});

Was ist mit der Javascript Filereader Funktion zum Öffnen des lokale Datei, das heißt:

<input type="file" name="filename" id="filename">
<script>
$("#filename").change(function (e) {
  if (e.target.files != undefined) {
    var reader = new FileReader();
    reader.onload = function (e) {
        // Get all the contents in the file
        var data = e.target.result; 
        // other stuffss................            
    };
    reader.readAsText(e.target.files.item(0));
  }
});
</script>

Jetzt Choose file Taste und wechseln Sie zu der Datei file:///C:/path/to/XSL%20Website/data/home.xml Klicken Sie auf

Starten Sie Chrom wie so zu umgehen diese Einschränkung. open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files

Abgeleitet von Josh Lees Kommentar aber ich brauchte den vollständigen Pfad zu Google Chrome geben, um mit Google Chrome Öffnen von meiner Windows-Partition zu vermeiden (in Parallels).

So wie ich gerade um das funktionierte nicht zu verwenden XMLHTTPRequest überhaupt, aber schließen die in einer separaten JavaScript-Datei stattdessen benötigten Daten. (In meinem Fall brauchte ich eine binäre SQLite Blob Verwendung mit https://github.com/kripken/sql js / )

Ich habe eine Datei mit dem Namen base64_data.js (und gebrauchte btoa() die Daten zu konvertieren, dass ich brauchte, und fügen Sie ihn in eine <div>, damit ich es kopieren kann).

var base64_data = "U1FMaXRlIGZvcm1hdCAzAAQA ...<snip lots of data> AhEHwA==";

und dann die Daten in dem HTML-Code wie normale Javascript enthalten:

<div id="test"></div>

<script src="base64_data.js"></script>
<script>
    data = atob(base64_data);
    var sqldb = new SQL.Database(data);
    // Database test code from the sql.js project
    var test = sqldb.exec("SELECT * FROM Genre");
    document.getElementById("test").textContent = JSON.stringify(test);
</script>

Ich stelle mir vor, es wäre trivial, dies zu ändern JSON zu lesen, vielleicht sogar XML; Ich lasse das als eine Übung für den Leser;)

Sie können versuchen, 'Access-Control-Allow-Origin':'*' in response.writeHead(, {[here]}) setzen.

Verwenden Sie den 'Web-Server für Chrome-App'. (Sie haben es tatsächlich auf Ihrem PC, ob Sie wissen oder nicht. Suchen sie nur in cortana!). Öffnen Sie es und klicken Sie auf ‚Datei auswählen‘ wählen Sie den Ordner mit Dateien darin. wählen Sie nicht tatsächlich Ihre Datei. Wählen Sie Ihre Dateien Ordner klicken Sie dann auf den Link (s) unter dem ‚wählen Ordner‘ klicken.

, wenn es Sie in die Datei nehmen tut, dann fügen Sie den Namen der Datei, in die urs. wie folgt aus:

   https://127.0.0.1:8887/fileName.txt

Link zum Web-Server für chrome: click me

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top