Erlauben Sie Google Chrome, XMLHttpRequest zum Laden einer URL aus einer lokalen Datei zu verwenden

125

Wenn Sie versuchen, eine HTTP-Anforderung mit XMLHttpRequest aus einer lokalen Datei auszuführen, schlägt dies grundsätzlich aufgrund eines Access-Control-Allow-OriginVerstoßes fehl .

Ich verwende die lokale Webseite jedoch selbst und habe mich gefragt, ob es eine Möglichkeit gibt, Google Chrome dazu zu bringen, diese Anforderungen zuzulassen, die von einer lokalen Datei an eine URL im Internet gesendet werden.

ZB $.get('http://www.google.com/')schlägt beim Ausführen in einer lokalen Datei fehl, aber ich habe die Seite selbst per Skript erstellt und verwende sie selbst. Daher wäre es äußerst nützlich, wenn ich sie unterdrücken und die URL laden könnte.

Wie kann ich Google Chrome erlauben, URLs mit XMLHttpRequest aus lokalen Dateien zu laden?

pimvdb
quelle
1
Access-Control-Allow-Origin: nullvon der Website funktioniert. (ofc. nicht von google.com)
inf3rno
3
@JessamynSmith: Die Reihenfolge der Antworten ändert sich, und die akzeptierte Antwort kann sich auch ändern. Es ist daher besser, auf eine Antwort zu verlinken, als etwas wie "Die Antwort unter der akzeptierten Antwort" zu sagen. Verwenden Sie die URL, zu der der Link "Teilen" der Antwort führt.
Michael Scheper
2
@MichaelScheper Dein Kommentar ist etwas irrelevant, da ich den eigentlichen Befehl eingefügt habe, der funktioniert hat. Falls es jedoch sinnvoll ist, den Link einzuschließen, habe ich ihn gelöscht und erneut veröffentlicht. In modernem Chrome sehen Fehler folgendermaßen aus: XMLHttpRequest kann die Datei ///path/to/file/css/base.css nicht laden. Ursprungsübergreifende Anforderungen werden nur für Protokollschemata unterstützt: http, data, chrome, chrome-extension, https, chrome-extension-resource. Diese Antwort stackoverflow.com/a/4819114/1649165 hat bei mir funktioniert, dh Chrome über die Befehlszeile ausführen: chrome --allow-file-access-from-files
Jessamyn Smith
@ JessamynSmith: Entschuldigung, Sie dachten, mein Rat sei irrelevant. Da Sie eine bestimmte Antwort für relevant hielten, dachte ich, Sie möchten Ihren Kommentar möglicherweise zukunftssicher machen. Mein Fehler.
Michael Scheper

Antworten:

49

Startchrom mit --disable-web-security

Unter Windows:

chrome.exe --disable-web-security

Auf dem Mac:

open /Applications/Google\ Chrome.app/ --args --disable-web-security

Dies ermöglicht domänenübergreifende Anforderungen.
Mir ist nicht bekannt, ob dies auch für lokale Dateien funktioniert, aber lassen Sie es uns wissen!

Und erwähnen Sie, dass dies genau das tut, was Sie erwarten. Es deaktiviert die Websicherheit. Seien Sie also vorsichtig damit.

jAndy
quelle
Sie können Safari auch auf einem Mac verwenden. AJAX kann standardmäßig lokale Dateien verwenden, wenn die Anforderung aus einer lokalen Datei erfolgt. Auch über '.exe' wird im Q nichts über Windows gesagt. Pim ist ein Windows-Entwickler, aber dennoch wird nichts über Windows gesagt.
1
Ja, ich bin unter Windows, tut mir leid. Werde das jetzt ausprobieren, danke. Übrigens, ich führe Chrome immer dann aus, wenn mein Computer eingeschaltet ist. Gibt es also eine Möglichkeit, domänenübergreifende Anforderungen nur mit lokalen Dateien oder nur auf einer bestimmten Registerkarte zuzulassen? Weil ich auf diese Weise nicht gleichzeitig sicher im Internet surfen kann ...
pimvdb
1
Ich habe gerade den neuesten Chromium-Build heruntergeladen, um eine eigenständige, unsichere Version zum Testen auszuführen, und das "echte", installierte Chrome für sicheres Surfen im Internet. Und es funktioniert, danke!
Pimvdb
@ Tom - Sie sollten dies auf einem Mac mit Safari ohne Änderungen an den Einstellungen tun können, solange Sie das Protokoll "file: ///" und nicht " localhost " verwenden
Near Privman
2
Ich habe es auf Safari 10.1 versucht und es gab mir: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.Daher ist die Aussage über den Safari-Browser aus diesem Thread nicht mehr gültig.
Michal Cichon
233

Die Verwendung eines --disable-web-securitySchalters ist ziemlich gefährlich ! Warum die Sicherheit überhaupt deaktivieren, während Sie XMLHttpRequest nur erlauben können, mit --allow-file-access-from-filesswitch auf Dateien aus anderen Dateien zuzugreifen ?

Stellen Sie vor der Verwendung dieser Befehle sicher, dass alle laufenden Instanzen von Chrome beendet sind.

Unter Windows:

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

Auf dem Mac:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files

Diskussionen über diese "Funktion" von Chrome:

Konstantin Smolyanin
quelle
5
Ist es möglich, dies zum Standardverhalten zu machen, ohne jedes Mal ein Terminal / eine Befehlszeile oder eine benutzerdefinierte Verknüpfung öffnen zu müssen?
Kokodoko
1
@ Kokodoko Ich denke nein.
Konstantin Smolyanin
2
@JoshH Ich stimme voll und ganz zu, dass es viel besser ist, einen lokalen Webserver für die Website-Entwicklung zu verwenden, als direkt über den Browser auf lokale Dateien zuzugreifen. Die genaue Frage wurde jedoch gestellt und ich habe sie gerade beantwortet.
Konstantin Smolyanin
13
Für den Fall, dass jemand anderes dies versuchen wird: Dieses Flag ist nicht verfügbar / änderbar inchrome://flags
Blaise
5
@pimvdb Ich denke, Sie sollten diese als akzeptierte Antwort markieren.
Chris-l
21

Mac-Version. Vom Terminallauf:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files
Nek
quelle
Ich sehe hier mehrere Abstimmungen. Können Sie näher erläutern, was mit meiner Antwort nicht stimmt?
Nek
Wie andere Antworten erklären, ist es unklug, die Deaktivierung der gesamten Websicherheit vorzuschlagen, wenn es einen bestimmten Schalter gibt, der diese eine Sache ändert.
neugierigdannii
Es wäre schön, eine dauerhaftere Lösung zu haben. Dies setzt voraus, dass der Benutzer dies im Voraus weiß, und erfordert auch einen Neustart von Chrom.
Michael Dunn
3

Unter Ubuntu:

chromium-browser --disable-web-security

Für weitere Details / Schalter:

http://peter.sh/experiments/chromium-command-line-switches/

Referenziert von

Taimoor Changaiz
quelle
Ich denke, das Festlegen von Dateien ist sicherer. Google-Chrome - Erlaubt den Dateizugriff von Dateien ~ / foo
Muhammed Moussa
Dies ist für den jeweiligen Anwendungsfall etwas weit gefasst. Aber Requisiten für eine Lösung trotzdem
Michael Dunn