Consenti a Google Chrome di utilizzare XMLHttpRequest per caricare un URL da un file locale


125

Quando si tenta di eseguire una richiesta HTTP utilizzando XMLHttpRequest da un file locale, sostanzialmente non riesce a causa di una Access-Control-Allow-Originviolazione.

Tuttavia, sto utilizzando la pagina Web locale, quindi mi chiedevo se esiste un modo per consentire a Google Chrome di consentire queste richieste, che vanno da un file locale a un URL su Internet.

Ad esempio, $.get('http://www.google.com/')quando si esegue un file locale non riesce, ma ho copiato personalmente la pagina e la sto usando da sola, quindi sarebbe estremamente utile se potessi eliminarla e caricare l'URL.

Quindi, come posso consentire a Google Chrome di caricare URL usando XMLHttpRequest da file locali?


1
Access-Control-Allow-Origin: nulldal sito web funziona. (spesso non da google.com)
inf3rno,

3
@JessamynSmith: l'ordine delle risposte cambia e anche la risposta accettata può cambiare, quindi è meglio collegarsi a una risposta piuttosto che dire qualcosa come "la risposta sotto la risposta accettata". Utilizza l'URL a cui conduce il link "condividi" della risposta.
Michael Scheper,

2
@MichaelScheper Il tuo commento è alquanto irrilevante dato che ho incollato il comando effettivo che ha funzionato. Tuttavia, nel caso ci sia valore nell'includere il link, ho cancellato e rispedito. Nella versione moderna di Chrome, gli errori sembrano: XMLHttpRequest non può caricare il file: ///path/to/file/css/base.css. Le richieste di origine incrociata sono supportate solo per gli schemi di protocollo: http, dati, chrome, chrome-extension, https, chrome-extension-resource. Questa risposta stackoverflow.com/a/4819114/1649165 ha funzionato per me, ovvero eseguire chrome dalla riga di comando: chrome --allow-file-access-from-files
Jessamyn Smith

@JessamynSmith: mi dispiace che tu abbia pensato che il mio consiglio fosse irrilevante. Dal momento che hai pensato che una risposta particolare fosse pertinente, ho pensato che ti sarebbe piaciuto rendere il tuo commento a prova di futuro. Errore mio.
Michael Scheper,

Risposte:


49

startup chrome con --disable-web-security

Su Windows:

chrome.exe --disable-web-security

Su Mac:

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

Ciò consentirà richieste tra domini.
Non so se questo funziona anche con i file locali, ma fatecelo sapere!

E menziona, questo fa esattamente quello che ti aspetti, disabilita la sicurezza web, quindi fai attenzione.


Puoi anche utilizzare Safari su un Mac. Consente AJAX ai file locali per impostazione predefinita quando la richiesta viene effettuata da un file locale. Inoltre, su ".exe", non si dice nulla in Q su Windows. Pim è un sviluppatore di Windows, ma comunque nulla di detto su Windows.

1
Sì, sono su Windows, mi dispiace per quello. Lo proverò ora, grazie. A proposito, sto eseguendo Chrome sempre quando il mio computer è acceso, quindi c'è un modo per consentire la richiesta tra domini solo con file locali o solo in una scheda specifica? Perché in questo modo, in realtà non riesco a navigare in Internet in modo sicuro allo stesso tempo ...
pimvdb,

1
Ho appena scaricato l'ultima versione di Chromium in modo da avere una versione autonoma e non sicura in esecuzione per i test, e il "vero" Chrome installato per la navigazione in Internet sicura. E funziona, grazie!
pimvdb,

@ Tom - dovresti essere in grado di farlo su Mac con Safari, senza alcuna modifica delle impostazioni, purché usi il protocollo "file: ///" e non " localhost "
Vicino a Privman il

2
L'ho provato su Safari 10.1 e mi ha dato: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.quindi la dichiarazione sul browser Safari da questo thread non è più valida.
Michal Cichon,

233

L'uso di --disable-web-securityswitch è abbastanza pericoloso ! Perché disabilitare la sicurezza mentre puoi semplicemente consentire a XMLHttpRequest di accedere ai file da altri file usando --allow-file-access-from-filesswitch?

Prima di utilizzare questi comandi, assicurati di terminare tutte le istanze in esecuzione di Chrome.

Su Windows:

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

Su Mac:

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

Discussioni su questa "funzione" di Chrome:


5
È possibile rendere questo comportamento predefinito senza dover aprire ogni volta un terminale / riga di comando o un collegamento personalizzato?
Kokodoko,

1
@Kokodoko Penso di no.
Konstantin Smolyanin,

2
@JoshH Sono completamente d'accordo sul fatto che è molto meglio utilizzare il server Web locale per lo sviluppo del sito Web, quindi accedere ai file locali direttamente dal browser. Tuttavia, è stata posta la domanda esatta e ho appena risposto.
Konstantin Smolyanin,

13
Nel caso qualcun altro lo provi: questo flag non è disponibile / modificabile inchrome://flags
Blaise

5
@pimvdb Penso che dovresti contrassegnarlo come risposta accettata.
chris-l,

21

Versione per Mac. Da terminale:

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

Vedo diversi voti negativi qui. Puoi spiegare cosa c'è che non va nella mia risposta?
Nek,

Come spiegano le altre risposte, non è saggio suggerire di disabilitare tutta la sicurezza Web quando esiste un interruttore specifico che cambia questa singola cosa.
curiousdannii,

sarebbe bello avere una soluzione più permanente. Questo presuppone che l'utente lo sappia in anticipo e richiede anche un riavvio di Chrome.
Michael Dunn,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.