J'essaie de charger un modèle 3D dans Three.js avec JSONLoader
, et ce modèle 3D se trouve dans le même répertoire que le site Web entier.
Je reçois l'erreur "Cross Origin requests are only supported for HTTP."
, mais je ne sais pas ce qui la cause ni comment y remédier.
Ma boule de cristal indique que vous chargez le modèle à l'aide de file://
ou C:/
, qui reste fidèle au message d'erreur car ils ne sont pas http://
.
Vous pouvez donc installer un serveur Web sur votre PC local ou télécharger le modèle ailleurs et utiliser jsonp
et modifier l'URL en http://example.com/path/to/model
Juste pour être explicite - Oui, l'erreur dit que vous ne pouvez pas pointer directement votre navigateur sur file://some/path/some.html
Voici quelques options pour activer rapidement un serveur Web local afin de permettre à votre navigateur de restituer les fichiers locaux.
Si vous avez installé Python ...
Changez de répertoire dans le dossier où se trouve votre fichier some.html
ou vos fichiers à l’aide de la commande cd /path/to/your/folder
Démarrez un serveur Web Python à l'aide de la commande python -m SimpleHTTPServer
Cela démarrera un serveur Web pour héberger votre liste de répertoires complète à http://localhost:8000
python -m SimpleHTTPServer 9000
vous donnant un lien: http://localhost:9000
Cette approche est intégrée à toute installation Python.
Suivez les mêmes étapes, mais utilisez plutôt la commande suivante python3 -m http.server
Sinon, si vous souhaitez une configuration plus réactive et utilisez déjà nodejs ...
Installez http-server
en tapant npm install -g http-server
Passez dans votre répertoire de travail, où réside votresome.html
Démarrez votre serveur http en émettant http-server -c-1
Cela permet de générer un fichier httpd Node.js, qui sert les fichiers de votre répertoire sous forme de fichiers statiques accessibles à partir de http://localhost:8080
Si votre langue préférée est le rubis ... les dieux du rubis disent que cela fonctionne aussi:
Ruby -run -e httpd . -p 8080
Bien sûr, PHP a aussi sa solution.
php -S localhost:8000
Couru à cela aujourd'hui.
J'ai écrit du code qui ressemblait à ceci:
app.controller('ctrlr', function($scope, $http){
$http.get('localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
... mais cela aurait dû ressembler à ceci:
app.controller('ctrlr', function($scope, $http){
$http.get('http://localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
La seule différence était le manque de http://
dans le deuxième extrait de code.
Je voulais juste le dire au cas où il y en aurait d'autres avec un problème similaire.
Il suffit de changer l'URL en http://localhost
au lieu de localhost
. Si vous ouvrez le fichier html à partir de local, vous devez créer un serveur local pour servir ce fichier html. La manière la plus simple consiste à utiliser Web Server for Chrome
. Cela résoudra le problème.
Dans une application Android - par exemple, pour permettre à JavaScript d'accéder aux actifs via file:///Android_asset/
-, utilisez setAllowFileAccessFromFileURLs(true)
sur la WebSettings
obtenue en appelant getSettings()
sur la WebView
.
Pour ceux qui utilisent Windows sans Python ou Node.js, il existe toujours une solution légère: Mongoose.
Tout ce que vous faites est de faire glisser l'exécutable à l'emplacement de la racine du serveur et de l'exécuter. Une icône apparaît dans la barre des tâches et vous permet d'accéder au serveur dans le navigateur par défaut.
De plus, Z-WAMP est un WAMP 100% portable qui s’exécute dans un seul dossier, c’est génial. C'est une option si vous avez besoin d'un serveur rapide PHP et MySQL.
Si vous utilisez Mozilla Firefox, cela fonctionnera comme prévu sans aucun problème.
P.S. Même IE_Edge fonctionne bien, étonnamment !!
Je vais énumérer 3 approches différentes pour résoudre ce problème:
npm
très léger: Installez live-server à l'aide de npm install -g live-server
. Ensuite, allez dans ce répertoire, ouvrez le terminal et tapez live-server
et appuyez sur Entrée, la page sera servie à localhost:8080
. BONUS: Il prend également en charge le rechargement à chaud par défaut.target
en "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:/ChromeDevSession"
et enregistrez. Ensuite, à l'aide de Chrome, ouvrez la page à l'aide de ctrl+o
. REMARQUE: Utilisez NOT avec ce raccourci pour une navigation normale.Utilisez http://
ou https://
pour créer une URL
error: localhost:8080
solution: http://localhost:8080
le moyen le plus rapide pour moi était: Pour les utilisateurs de Windows, exécutez votre fichier sur le problème résolu de Firefox, ou Si vous voulez utiliser Chrome de la manière la plus simple pour moi, c’est d’installer Python 3, puis à partir de la commande Invite, exécutez la commande python -m http.server
puis accédez à http: // localhost: 8000/ , puis accédez à vos fichiers
python -m http.server
Je recevais cette erreur exacte lors du chargement d'un fichier HTML sur le navigateur qui utilisait un fichier json à partir du répertoire local. Dans mon cas, j'ai pu résoudre ce problème en créant un serveur de nœud simple permettant de serveur le contenu statique. J'ai laissé le code pour ceci à ceci autre réponse .
Je vous suggère d'utiliser un mini-serveur pour exécuter ce type d'applications sur localhost (si vous n'utilisez pas un serveur intégré).
En voici un qui est très simple à configurer et à exécuter:
https://www.npmjs.com/package/tiny-server
Il dit simplement que l'application doit être exécutée sur un serveur Web. J'ai eu le même problème avec Chrome, j'ai démarré Tomcat et déplacé mon application là-bas, et cela a fonctionné.
Je soupçonne que cela est déjà mentionné dans certaines réponses, mais je le modifierai légèrement pour avoir une réponse complète (plus facile à trouver et à utiliser).
Allez à: https://nodejs.org/en/download/ . Installez nodejs.
Installez le serveur http en exécutant la commande de la commande Invite npm install -g http-server
.
Accédez au répertoire de travail dans lequel réside index.html
/yoursome.html
.
Démarrez votre serveur http en exécutant la commande http-server -c-1
Ouvrez le navigateur Web avec http://localhost:8080
Ou http://localhost:8080/yoursome.html
- en fonction de votre nom de fichier html.
J'ai également été capable de recréer ce message d'erreur lors de l'utilisation d'une balise d'ancrage avec le href suivant:
<a href="javascript:">Example a tag</a>
Dans mon cas, une balise était utilisée pour obtenir le "curseur de pointeur" et l'événement était en fait contrôlé par un événement jQuery on click. J'ai supprimé le href et ajouté une classe qui s'applique:
cursor:pointer;
MacOS
..., configurez un simple LaunchAgent pour activer ces fonctionnalités glamour dans votre propre copie de Chrome ...
Enregistrez une plist
, nommée any (launch.chrome.dev.mode.plist
, par exemple) dans ~/Library/LaunchAgents
avec un contenu similaire à ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>launch.chrome.dev.mode</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Google Chrome.app/Contents/MacOS/Google Chrome</string>
<string>-allow-file-access-from-files</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Il devrait lancer au démarrage .. mais vous pouvez le forcer à le faire à tout moment avec la commande terminal
launchctl load -w ~/Library/LaunchAgents/launch.chrome.dev.mode.plist
TADA! ???? ???????? ???? ????????
Impossible de charger des fichiers locaux statiques (par exemple: svg) sans serveur. Si NPM/YARN est installé sur votre ordinateur, vous pouvez configurer un serveur http simple à l’aide de " serveur http "
npm install http-server -g
http-server [path] [options]
Ou ouvrez un terminal dans ce dossier de projet et tapez "hs". Il démarrera automatiquement le serveur HTTP Live.
heu Je viens de trouver des mots officiels: "Les tentatives de chargement de modules AMD distants non construits utilisant le plug-in dojo/text échoueront en raison de restrictions de sécurité croisées. le système de compilation.) " https://dojotoolkit.org/documentation/tutorials/1.10/cdn/
Une façon dont cela a fonctionné de charger des fichiers locaux est de les utiliser dans le dossier du projet plutôt qu’en dehors de votre dossier de projet. Créez un dossier sous les exemples de fichiers de votre projet de la même manière que nous avons créé pour les images et remplacez la section qui utilise un chemin local complet autre que le chemin du projet et utilisez une URL relative du fichier sous le dossier du projet . Cela a fonctionné pour moi.