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?


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.


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:


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.