210 votes

XMLHttpRequest Origine null n'est pas autorisé Access-Control-Allow-Origin pour le fichier:/// file:/// (sans serveur)

Je suis en train de créer un site web qui peut être téléchargé et exécuté localement par le lancement de son fichier d'index.

Tous les fichiers sont les collectivités locales, ne sont utilisées les ressources en ligne.

Lorsque j'essaie d'utiliser le AJAXSLT plugin pour jQuery pour traiter un fichier XML avec une feuille de style XSL modèle (dans les sous répertoires), je reçois l'erreur suivante:

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/data/home.xml. Origin null is not allowed by Access-Control-Allow-Origin.

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/assets/xsl/main.xsl. Origin null is not allowed by Access-Control-Allow-Origin.

Le fichier d'index qui fait la demande est - file:///C:/path/to/XSL%20Website/index.html , tandis que les fichiers JavaScript utilisés sont stockés dans file:///C:/path/to/XSL%20Website/assets/js/.

Comment puis-je faire pour régler ce problème?

178voto

zourtney Points 4501

Pour les cas où l'exécution d'un serveur web local n'est pas une option, vous pouvez autoriser google Chrome accès à l' file:// des fichiers via un navigateur commutateur. Après quelques recherches, j'ai trouvé cette discussion, qui parle d'un navigateur interrupteur dans le message d'ouverture. Exécutez google Chrome exemple avec:

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

Cela peut être acceptable pour les environnements de développement, mais, à peu de chose. Vous ne voulez certainement pas présent sur tous les temps. Cela semble être une question ouverte (à partir de janvier 2011).

Voir aussi: Problèmes avec jQuery getJSON à l'aide de fichiers locaux en Chrome

86voto

Singletoned Points 2652

Essentiellement, la seule façon de traiter cette question est d'avoir un serveur web fonctionnant sur localhost et à les servir, à partir de là.

Il est dangereux pour un navigateur pour permettre à une requête ajax d'accéder à un fichier sur votre ordinateur, donc la plupart des navigateurs semblent traiter "file://" demandes comme n'ayant pas d'origine dans le but de "Même Origine"

Le démarrage d'un serveur web peuvent être aussi insignifiant qu' cding dans le répertoire les fichiers sont en cours d'exécution:

python -m SimpleHTTPServer

5voto

Reno Points 886

Cette solution vous permettra de charger un script local à l'aide de jQuery.getScript(). C'est un paramètre global, mais vous pouvez également définir le crossDomain option sur demande.

$.ajaxPrefilter( "json script", function( options ) {
  options.crossDomain = true;
});

5voto

suhail Points 2520

Que penser de l'utilisation du javascript FileReader fonction pour ouvrir le fichier local, c'est à dire:

<input type="file" name="filename" id="filename">
<script>
$("#filename").change(function (e) {
  if (e.target.files != undefined) {
    var reader = new FileReader();
    reader.onload = function (e) {
        // Get all the contents in the file
        var data = e.target.result; 
        // other stuffss................            
    };
    reader.readAsText(e.target.files.item(0));
  }
});
</script>

Maintenant, Cliquez sur Choose file bouton parcourir et sélectionnez le fichier file:///C:/path/to/XSL%20Website/data/home.xml

4voto

ericsoco Points 1948

Voici un script qui va lancer google Chrome avec l' --allow-file-access-de-fichiers commutateur activé, pour OSX/Chrome devs:

set chromePath to POSIX path of "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"    
set switch to " --allow-file-access-from-files"
do shell script (quoted form of chromePath) & switch & " > /dev/null 2>&1 &"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X