177 votes

Origine de null n’est pas autorisé par Access-Control-Allow-Origin

J'ai fait un petit fichier xslt pour créer une sortie html appelé la météo.xsl avec le code comme suit:

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>

Je veux charger dans le code html de sortie dans un div dans un fichier html qui je suis en train de faire à l'aide de jQuery comme suit:

<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>

Mais j'obtiens l'erreur suivante: Origine null n'est pas autorisé par Access-Control-Allow-Origin.

J'ai lu à propos de l'ajout d'un en-tête pour la xslt, mais je ne suis pas sûr de la façon de le faire, de sorte que toute aide serait appréciée, et en cas de chargement dans le code html de sortie ne peut pas être fait de cette façon, puis des conseils sur la façon d'autre à faire, ce serait génial.

222voto

T.J. Crowder Points 285826

Origine null est le système de fichiers local, de sorte que laisse à penser que vous êtes en train de charger la page HTML qui ne l' load appel via un file:/// d'URL (par exemple, il suffit de double-cliquant dessus dans un navigateur de fichiers ou similaire). Les différents navigateurs qui utilisent des approches différentes pour l'application de la Même Origine que les fichiers locaux.

Ma conjecture est que vous alliez voir ce à l'aide de Chrome. Chrome règles pour l'application de la SOP pour les fichiers locaux sont très serrés, il interdit même le chargement de fichiers dans le même répertoire que le document. Ne sorte de l'Opéra. Certains autres navigateurs, comme Firefox, permettre un accès limité à des fichiers locaux. Mais, fondamentalement, à l'aide d'ajax avec les ressources locales ne va pas au travail de la croix-navigateur.

Si vous êtes juste de tester quelque chose au niveau local que vous allez vraiment être déploiement sur le web, plutôt que d'utiliser des fichiers locaux, installer un serveur web simple et essai par l'intermédiaire d' http:// des Url à la place. Qui vous donne beaucoup plus précises image de la sécurité.

215voto

Gokhan Tank Points 2365

Chrome et Safari a une restriction sur l'utilisation d'ajax avec les ressources locales. C'est pourquoi il lance un message d'erreur tel que

Origine null n'est pas autorisé par Access-Control-Allow-Origin.

Solution: Utiliser firefox ou télécharger vos données sur un serveur temporaire. Si vous voulez continuer à utiliser google Chrome, le lancer avec l'option ci-dessous;

--allow-file-access-from-files

Plus d'infos comment faire pour ajouter le paramètre ci-dessus pour google Chrome: clic Droit sur l'icône de google Chrome sur votre barre des tâches, cliquez-droit sur le Google Chrome sur la fenêtre pop-up et cliquez sur propriétés et ajouter le paramètre ci-dessus à l'intérieur de la zone de texte Cible en vertu de l'onglet Raccourci. Il sera comme ci-dessous;

C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Espérons que cela va aider!

45voto

gozzilli Points 1474

Voulais juste ajouter que la "exécuter un serveur web" réponse semble assez intimidant, mais si vous avez de python sur votre système (installé par défaut au moins sur MacOS et n'importe quelle distribution Linux) c'est aussi simple que:

python -m SimpleHTTPServer 8000

Donc si vous avez votre fichier html myfile.html dans un dossier, dire mydir, tout ce que vous avez à faire est de:

cd /path/to/mydir
python -m SimpleHTTPServer 8000

Ensuite, pointez votre navigateur pour:

http://localhost:8000/myfile.html

Et vous avez terminé! Fonctionne sur tous les navigateurs, sans désactiver la sécurité du web, permettant à des fichiers locaux, ou même en redémarrant le navigateur avec des options de ligne de commande.

2voto

saurabh Points 99

Ajouter un peu pour utiliser la solution de Gokhan pour l’utilisation :

Maintenant, vous avez juste besoin d’ajouter au-dessus du texte dans le texte cible, suivi d’un espace. Assurez-vous de que fermer toutes les instances du navigateur chrome après avoir ajouté au-dessus de propriété. Maintenant, redémarrez chrome par l’icône où vous avez ajouté cette propriété. Cela devrait fonctionner pour tous.

2voto

orberkov Points 75

Je voudrais humblement ajouter que, selon cette source: http://stackoverflow.com/a/14671362/1743693ce genre de problème est maintenant partiellement résolu en utilisant simplement la suite de jQuery instruction:

<script> 
    $.support.cors = true;
</script>

Je l'ai essayé sur IE10.0.9200, et cela a fonctionné immédiatement (à l'aide de jquery-1.9.0.js).

Sur chrome 28.0.1500.95 - cette instruction ne fonctionne pas (ce qui arrive tous les coins comme david se plaint dans les commentaires sur le lien ci-dessus)

L'exécution de chrome --allow-l'accès de fichier de fichiers ne fonctionne pas pour moi (comme Maistora de revendications ci-dessus)

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