Autoriser Google Chrome à utiliser XMLHttpRequest pour charger une URL à partir d'un fichier local

125

Lorsque vous essayez de faire une requête HTTP à l'aide de XMLHttpRequest à partir d'un fichier local, cela échoue essentiellement en raison d'une Access-Control-Allow-Originviolation.

Cependant, j'utilise moi-même la page Web locale, donc je me demandais s'il y avait un moyen de faire en sorte que Google Chrome autorise ces demandes, qui proviennent d'un fichier local vers une URL sur Internet.

Par exemple, $.get('http://www.google.com/')échoue lors de l'exécution dans un fichier local, mais j'ai écrit moi-même la page et je l'utilise moi-même, il serait donc extrêmement utile que je puisse la supprimer et charger l'URL.

Alors, comment puis-je autoriser Google Chrome à charger des URL à l'aide de XMLHttpRequest à partir de fichiers locaux?

pimvdb
la source
1
Access-Control-Allow-Origin: nullpar le site Web fonctionne. (ofc. not by google.com)
inf3rno
3
@JessamynSmith: L'ordre des réponses change, et la réponse acceptée peut également changer, il est donc préférable de créer un lien vers une réponse plutôt que de dire quelque chose comme «la réponse sous la réponse acceptée». Utilisez l'URL vers laquelle mène le lien «partager» de la réponse.
Michael Scheper
2
@MichaelScheper Votre commentaire est quelque peu hors de propos étant donné que j'ai collé dans la commande réelle qui a fonctionné. Cependant, au cas où il serait utile d'inclure le lien, j'ai supprimé et republié. Dans Chrome moderne, les erreurs ressemblent à: XMLHttpRequest ne peut pas charger le fichier: ///path/to/file/css/base.css. Les demandes d'origine croisée ne sont prises en charge que pour les schémas de protocole: http, data, chrome, chrome-extension, https, chrome-extension-resource. Cette réponse stackoverflow.com/a/4819114/1649165 a fonctionné pour moi, c'est-à-dire exécutez chrome à partir de la ligne de commande: chrome --allow-file-access-from-files
Jessamyn Smith
@JessamynSmith: Désolé, vous pensiez que mon conseil n'était pas pertinent. Puisque vous pensiez qu'une réponse particulière était pertinente, j'ai pensé que vous aimeriez peut-être pérenniser votre commentaire. Mon erreur.
Michael Scheper

Réponses:

49

chrome de démarrage avec --disable-web-security

Sous Windows:

chrome.exe --disable-web-security

Sur Mac:

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

Cela permettra les demandes inter-domaines.
Je ne sais pas si cela fonctionne également pour les fichiers locaux, mais faites-le nous savoir!

Et mentionnez que cela fait exactement ce que vous attendez, cela désactive la sécurité Web, alors faites attention.

jAndy
la source
Vous pouvez également utiliser Safari sur un Mac. Il autorise AJAX aux fichiers locaux par défaut lorsque la demande est faite à partir d'un fichier local. De plus, à propos de '.exe', rien dans le Q n'est dit à propos de Windows. Pim est un développeur Windows, mais rien n'a été dit sur Windows.
1
Oui, je suis sous Windows, désolé. Je vais essayer ceci maintenant, merci. À propos, j'exécute toujours Chrome lorsque mon ordinateur est allumé, alors existe-t-il un moyen d'autoriser uniquement les demandes interdomaines avec des fichiers locaux ou uniquement dans un onglet spécifique? Parce que de cette façon, je ne peux pas naviguer sur Internet en toute sécurité en même temps ...
pimvdb
1
Je viens de télécharger la dernière version de Chromium afin d'avoir une version autonome et non sécurisée en cours d'exécution pour les tests, et le «vrai» Chrome installé pour une navigation Internet en toute sécurité. Et ça marche, merci!
pimvdb
@Tom - vous devriez pouvoir le faire sur Mac avec Safari, sans aucune modification des paramètres, tant que vous utilisez le protocole "file: ///" et non " localhost "
Près de Privman le
2
Je l'ai essayé sur Safari 10.1 et cela m'a donné: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.donc la déclaration sur le navigateur Safari de ce fil n'est plus valide.
Michal Cichon
233

L'utilisation de --disable-web-securityswitch est assez dangereuse ! Pourquoi désactiver la sécurité alors que vous pouvez simplement autoriser XMLHttpRequest à accéder aux fichiers d'autres fichiers en utilisant--allow-file-access-from-files switch?

Avant d'utiliser ces commandes, assurez-vous de mettre fin à toutes les instances en cours d'exécution de Chrome.

Sous Windows:

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

Sur Mac:

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

Discussions sur cette "fonctionnalité" de Chrome:

Konstantin Smolyanin
la source
5
Est-il possible d'en faire le comportement par défaut sans avoir à ouvrir un terminal / une ligne de commande ou un raccourci personnalisé à chaque fois?
Kokodoko le
1
@Kokodoko je pense que non.
Konstantin Smolyanin
2
@JoshH Je suis tout à fait d'accord qu'il est préférable d'utiliser un serveur Web local pour le développement de sites Web, puis d'accéder aux fichiers locaux directement par le navigateur. Cependant, la question exacte a été posée et je viens d'y répondre.
Konstantin Smolyanin
13
Au cas où quelqu'un d'autre essaierait ceci: ce drapeau n'est pas disponible / modifiable danschrome://flags
Blaise
5
@pimvdb Je pense que vous devriez marquer celui-ci comme la réponse acceptée.
chris-l
21

Version Mac. Depuis le terminal:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files
Nek
la source
Je vois plusieurs votes négatifs ici. Pouvez-vous expliquer ce qui ne va pas avec ma réponse?
Nek
Comme d'autres réponses l'expliquent, il n'est pas judicieux de suggérer de désactiver toute la sécurité Web lorsqu'un commutateur spécifique change cette seule chose.
curiousdannii
ce serait bien d'avoir une solution plus permanente. Celui-ci suppose que l'utilisateur le sait à l'avance et nécessite également une relance de chrome.
Michael Dunn
3

Sur Ubuntu:

chromium-browser --disable-web-security

Pour plus de détails / commutateurs:

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

Référencé de

Taimoor Changaiz
la source
Je pense que la spécification des fichiers sera plus sûre `google-chrome --allow-file-access-from-files ~ / foo`
Muhammed Moussa
C'est un peu large pour le cas d'utilisation spécifique. Mais les accessoires pour une solution quoi qu'il en soit
Michael Dunn