Zezwól przeglądarce Google Chrome na używanie XMLHttpRequest do ładowania adresu URL z pliku lokalnego

125

Podczas próby wykonania żądania HTTP za pomocą XMLHttpRequest z pliku lokalnego, zasadniczo kończy się niepowodzeniem z powodu Access-Control-Allow-Originnaruszenia.

Jednak sam korzystam z lokalnej strony internetowej, więc zastanawiałem się, czy istnieje sposób, aby Google Chrome zezwalał na te żądania, które są przesyłane z pliku lokalnego do adresu URL w Internecie.

Np. Kończy się $.get('http://www.google.com/')niepowodzeniem podczas wykonywania w pliku lokalnym, ale sam utworzyłem skrypt strony i sam go używam, więc byłoby niezwykle przydatne, gdybym mógł to ukryć i załadować adres URL.

Jak więc mogę zezwolić przeglądarce Google Chrome na ładowanie adresów URL za pomocą XMLHttpRequest z plików lokalnych?

pimvdb
źródło
1
Access-Control-Allow-Origin: nullprzez witrynę działa. (ofc. nie przez google.com)
inf3rno
3
@JessamynSmith: Kolejność odpowiedzi zmienia się, a zaakceptowana odpowiedź również może się zmienić, więc lepiej jest umieścić link do odpowiedzi niż powiedzieć coś w rodzaju „odpowiedź poniżej zaakceptowanej odpowiedzi”. Użyj adresu URL, do którego prowadzi link „udostępnij” w odpowiedzi.
Michael Scheper
2
@MichaelScheper Twój komentarz jest nieco nieistotny, biorąc pod uwagę, że wkleiłem polecenie, które działało. Jeśli jednak uwzględnienie linku ma wartość, usunąłem i wysłałem ponownie. We współczesnym Chrome błędy wyglądają następująco: XMLHttpRequest nie może załadować pliku: ///path/to/file/css/base.css. Żądania z różnych źródeł są obsługiwane tylko w przypadku schematów protokołów: http, data, chrome, chrome-extension, https, chrome-extension-resource. Ta odpowiedź stackoverflow.com/a/4819114/1649165 zadziałała dla mnie, tj. Uruchom chrome z wiersza poleceń: chrome --allow-file-access-from-files
Jessamyn Smith
@JessamynSmith: Przepraszam, że pomyślałeś, że moja rada była nieistotna. Ponieważ uważałeś, że konkretna odpowiedź jest istotna, pomyślałem, że możesz chcieć przedłużyć swój komentarz w przyszłości. Mój błąd.
Michael Scheper

Odpowiedzi:

49

uruchamianie Chrome z --disable-web-security

W systemie Windows:

chrome.exe --disable-web-security

Na komputerze Mac:

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

Umożliwi to wysyłanie żądań między domenami.
Nie wiem, czy to działa również w przypadku plików lokalnych, ale daj nam znać!

I wspomnij, robi dokładnie to, czego oczekujesz, wyłącza zabezpieczenia internetowe, więc bądź ostrożny.

jAndy
źródło
Możesz także używać Safari na Macu. Domyślnie zezwala AJAX na pliki lokalne, gdy żądanie jest wysyłane z pliku lokalnego. Ponadto, jeśli chodzi o „.exe”, nic w Q nie mówi o Windows. Pim jest deweloperem systemu Windows, ale nadal nic nie zostało powiedziane o systemie Windows.
1
Tak, używam Windowsa, przepraszam za to. Spróbuję tego teraz, dzięki. Nawiasem mówiąc, używam Chrome zawsze, gdy mój komputer jest włączony, więc czy istnieje sposób, aby zezwolić tylko na żądania międzydomenowe z plikami lokalnymi, czy tylko na określonej karcie? Ponieważ w ten sposób właściwie nie mogę jednocześnie bezpiecznie przeglądać Internetu ...
pimvdb
1
Właśnie pobrałem najnowszą wersję Chromium, aby mieć samodzielną, niebezpieczną wersję działającą do testowania i „prawdziwą”, zainstalowaną Chrome do bezpiecznego przeglądania Internetu. I działa, dzięki!
pimvdb
@Tom - powinieneś móc to zrobić na komputerze Mac z Safari, bez żadnych zmian ustawień, o ile używasz protokołu „file: ///”, a nie „ localhost
Near Privman
2
Wypróbowałem to na Safari 10.1 i dało mi to: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.więc oświadczenie o przeglądarce Safari z tego wątku nie jest już aktualne.
Michał Cichon
233

Używanie --disable-web-securityprzełącznika jest dość niebezpieczne ! Po co w ogóle wyłączać zabezpieczenia, skoro można po prostu zezwolić XMLHttpRequest na dostęp do plików z innych plików za pomocą --allow-file-access-from-filesprzełącznika?

Przed użyciem tych poleceń należy zakończyć wszystkie uruchomione wystąpienia Chrome.

W systemie Windows:

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

Na komputerze Mac:

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

Dyskusje na temat tej „funkcji” Chrome:

Konstantin Smolyanin
źródło
5
Czy można ustawić to zachowanie jako domyślne bez konieczności każdorazowego otwierania terminala / wiersza poleceń lub niestandardowego skrótu?
Kokodoko
1
@Kokodoko Myślę, że nie.
Konstantin Smolyanin
2
@JoshH Całkowicie zgadzam się, że znacznie lepiej jest używać lokalnego serwera WWW do tworzenia witryn internetowych niż uzyskiwać dostęp do lokalnych plików bezpośrednio przez przeglądarkę. Jednak zadałem dokładne pytanie i właśnie na nie odpowiedziałem.
Konstantin Smolyanin
13
Na wypadek, gdyby ktoś inny chciał tego spróbować: ta flaga nie jest dostępna / modyfikowalna wchrome://flags
Blaise
5
@pimvdb Myślę, że powinieneś oznaczyć tę odpowiedź jako zaakceptowaną.
chris-l
21

Wersja na Maca. Z terminala:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files
Nek
źródło
Widzę tutaj kilka głosów negatywnych. Czy możesz wyjaśnić, co jest nie tak z moją odpowiedzią?
Nek
Jak wyjaśniają inne odpowiedzi, nierozsądne jest sugerowanie wyłączania wszystkich zabezpieczeń internetowych, gdy istnieje określony przełącznik, który zmienia tę jedną rzecz.
curiousdannii
byłoby miło mieć trwalsze rozwiązanie. Ten zakłada, że ​​użytkownik wie z wyprzedzeniem i wymaga również ponownego uruchomienia Chrome.
Michael Dunn
3

W systemie Ubuntu:

chromium-browser --disable-web-security

Więcej szczegółów / przełączniki:

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

Odniesienie z

Taimoor Changaiz
źródło
Myślę, że określanie plików będzie bezpieczniejsze `google-chrome --allow-file-access-from-files ~ / foo`
Muhammed Moussa
Jest to trochę szerokie w konkretnym przypadku użycia. Ale rekwizyty do rozwiązania niezależnie
Michael Dunn