J'essaie de créer un site Web qui peut être téléchargé et exécuté localement en lançant son fichier d'index.
Tous les fichiers sont locaux, aucune ressource n'est utilisée en ligne.
Lorsque j'essaie d'utiliser le plug-in AJAXSLT pour jQuery pour traiter un fichier XML avec un modèle XSL (dans des sous-répertoires), je reçois les erreurs suivantes:
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 faisant la demande est file:///C:/path/to/XSL%20Website/index.html
alors que les fichiers JavaScript utilisés sont stockés dans file:///C:/path/to/XSL%20Website/assets/js/
.
Comment puis-je faire pour résoudre ce problème?
Essentiellement, la seule façon de résoudre ce problème est d'avoir un serveur Web en cours d'exécution sur localhost et de les servir à partir de là.
Il n'est pas sûr qu'un navigateur autorise une requête ajax à accéder à n'importe quel fichier de votre ordinateur, par conséquent, la plupart des navigateurs semblent traiter les requêtes "file: //" comme n'ayant aucune origine aux fins de la " même politique d'origine". ".
Le démarrage d'un serveur Web peut être aussi simple que d'
cd
entrer dans le répertoire dans lequel les fichiers se trouvent et s'exécutent:la source
python -m http.server
.Voici un script Apple qui lancera Chrome avec le commutateur --allow-file-access-from-files activé, pour les développeurs OSX / Chrome:
la source
open -a 'Google Chrome' --args --allow-file-access-from-files
.Cette solution vous permettra de charger un script local à l'aide de jQuery.getScript (). Il s'agit d'un paramètre global, mais vous pouvez également définir l'option crossDomain sur une base par demande.
la source
Qu'en est-il de l'utilisation de la fonction javascript FileReader pour ouvrir le fichier local, c'est-à-dire:
Maintenant, cliquez sur le
Choose file
bouton et accédez au fichierfile:///C:/path/to/XSL%20Website/data/home.xml
la source
Lancez Chrome comme ça pour contourner cette restriction:
open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files
.Dérivé du commentaire de Josh Lee, mais je devais spécifier le chemin complet vers Google Chrome afin d'éviter que Google Chrome ne s'ouvre depuis ma partition Windows (dans Parallels).
la source
La façon dont je viens de contourner ce problème n'est pas du tout d'utiliser XMLHTTPRequest, mais d'inclure les données nécessaires dans un fichier javascript distinct à la place. (Dans mon cas, j'avais besoin d'un blob SQLite binaire à utiliser avec https://github.com/kripken/sql.js/ )
J'ai créé un fichier appelé
base64_data.js
(et utilisébtoa()
pour convertir les données dont j'avais besoin et les insérer dans un fichier<div>
pour pouvoir les copier).puis inclus les données dans le html comme javascript normal:
J'imagine qu'il serait trivial de modifier cela pour lire JSON, peut-être même XML; Je vais laisser cela comme un exercice pour le lecteur;)
la source
Vous pouvez essayer de mettre
'Access-Control-Allow-Origin':'*'
enresponse.writeHead(, {[here]})
.la source
utilisez le «serveur Web pour l'application Chrome». (vous l'avez en fait sur votre PC, que vous le sachiez ou non. Il suffit de le rechercher dans Cortana!). ouvrez-le et cliquez sur «choisir un fichier», choisissez le dossier contenant votre fichier. ne sélectionnez pas réellement votre fichier. sélectionnez votre dossier de fichiers puis cliquez sur le (s) lien (s) sous le bouton 'choisir le dossier'.
s'il ne vous amène pas au fichier, ajoutez le nom du fichier aux urs. comme ça:
lien vers le serveur web pour chrome: cliquez sur moi
la source