Ich versuche, eine Website zu erstellen, die heruntergeladen und lokal ausgeführt werden kann, indem die Indexdatei gestartet wird.
Alle Dateien sind lokal, online werden keine Ressourcen verwendet.
Wenn ich versuche, das AJAXSLT-Plugin für jQuery zum Verarbeiten einer XML-Datei mit einer XSL-Vorlage (in Unterverzeichnissen) zu verwenden, werden folgende Fehler angezeigt:
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, die die Anforderung stellt, befindet sich, file:///C:/path/to/XSL%20Website/index.html
während die verwendeten JavaScript-Dateien in gespeichert werden file:///C:/path/to/XSL%20Website/assets/js/
.
Wie kann ich dieses Problem beheben?
Im Wesentlichen besteht die einzige Möglichkeit, damit umzugehen, darin, einen Webserver auf localhost auszuführen und von dort aus zu bedienen.
Es ist für einen Browser unsicher, einer Ajax-Anforderung den Zugriff auf eine beliebige Datei auf Ihrem Computer zu ermöglichen. Daher scheinen die meisten Browser "file: //" -Anfragen so zu behandeln, als hätten sie keinen Ursprung im Sinne der " Same Origin Policy ".
Das Starten eines Webservers kann so trivial sein wie das
cd
Aufrufen des Verzeichnisses, in dem sich die Dateien befinden und ausgeführt werden:quelle
python -m http.server
.Hier ist ein Applescript, das Chrome mit aktiviertem Schalter --allow-file-access-from-files für OSX / Chrome-Entwickler startet:
quelle
open -a 'Google Chrome' --args --allow-file-access-from-files
.Mit dieser Lösung können Sie ein lokales Skript mit jQuery.getScript () laden. Dies ist eine globale Einstellung. Sie können die Option crossDomain jedoch auch auf Anforderung festlegen.
quelle
Was ist mit der Verwendung der Javascript FileReader- Funktion zum Öffnen der lokalen Datei, dh:
Klicken Sie nun auf die
Choose file
Schaltfläche und navigieren Sie zur Dateifile:///C:/path/to/XSL%20Website/data/home.xml
quelle
Starten Sie Chrome wie folgt, um diese Einschränkung zu umgehen :
open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files
.Abgeleitet von Josh Lees Kommentar, aber ich musste den vollständigen Pfad zu Google Chrome angeben, um zu vermeiden, dass Google Chrome von meiner Windows-Partition (in Parallels) geöffnet wird.
quelle
Ich habe das gerade umgangen, indem ich XMLHTTPRequest überhaupt nicht verwendet habe, sondern die benötigten Daten stattdessen in eine separate Javascript-Datei aufgenommen habe. (In meinem Fall benötigte ich einen binären SQLite-Blob zur Verwendung mit https://github.com/kripken/sql.js/ )
Ich habe eine Datei mit dem Namen erstellt
base64_data.js
(und diebtoa()
benötigten Daten konvertiert und in eine Datei eingefügt,<div>
damit ich sie kopieren kann).und dann die Daten in das HTML wie normales Javascript aufgenommen:
Ich stelle mir vor, es wäre trivial, dies zu ändern, um JSON, vielleicht sogar XML, zu lesen. Ich werde das als Übung für den Leser belassen;)
quelle
Sie können versuchen,
'Access-Control-Allow-Origin':'*'
inresponse.writeHead(, {[here]})
.quelle
Verwenden Sie den 'Webserver für Chrome App'. (Sie haben es tatsächlich auf Ihrem PC, ob Sie es wissen oder nicht. Suchen Sie es einfach in Cortana!). Öffnen Sie es und klicken Sie auf "Datei auswählen". Wählen Sie den Ordner mit Ihrer Datei aus. Wählen Sie Ihre Datei nicht aus. Wählen Sie Ihren Dateiordner aus und klicken Sie auf die Links unter der Schaltfläche "Ordner auswählen".
Wenn Sie nicht zur Datei gelangen, fügen Sie den Namen der Datei zu urs hinzu. so was:
Link zum Webserver für Chrome: Klicken Sie auf mich
quelle