Estou tentando carregar um modelo 3D no Three.js JSONLoader
e esse modelo 3D está no mesmo diretório que o site inteiro.
Estou recebendo o "Cross origin requests are only supported for HTTP."
erro, mas não sei o que está causando nem como corrigi-lo.
Respostas:
Minha bola de cristal diz que você está carregando o modelo usando
file://
ouC:/
, o que permanece fiel à mensagem de erro, pois não estáhttp://
Portanto, você pode instalar um servidor da Web no PC local ou fazer upload do modelo em outro lugar e usar
jsonp
e alterar o URL parahttp://example.com/path/to/model
A origem é definida no RFC-6454 como
Portanto, mesmo que seu arquivo seja originário do mesmo host (
localhost
), mas contanto que o esquema seja diferente (http
/file
), eles serão tratados como origem diferente.fonte
file://
, mas não entendo por que isso é permitido. Bem, eu estou instalando LAMPP eu acho ...load('file://C:/users/user/supersecret.doc')
e, em seguida, fazer o upload do conteúdo para o seu servidor usando ajax etcApenas para ser explícito - Sim, o erro está dizendo que você não pode apontar seu navegador diretamente para
file://some/path/some.html
Aqui estão algumas opções para ativar rapidamente um servidor da Web local e permitir que o navegador renderize arquivos locais
Python 2
Se você tem o Python instalado ...
Mude o diretório para a pasta em que seu arquivo
some.html
ou arquivos existe usando o comandocd /path/to/your/folder
Inicie um servidor da Web Python usando o comando
python -m SimpleHTTPServer
Isso iniciará um servidor da web para hospedar toda a sua lista de diretórios em
http://localhost:8000
python -m SimpleHTTPServer 9000
fornecendo o link:http://localhost:9000
Essa abordagem está embutida em qualquer instalação do Python.
Python 3
Execute as mesmas etapas, mas use o seguinte comando
python3 -m http.server
Node.js
Como alternativa, se você exige uma configuração mais responsiva e já usa o nodejs ...
Instalar
http-server
digitandonpm install -g http-server
Mude para o seu diretório de trabalho, onde suas
some.html
vidasInicie seu servidor http emitindo
http-server -c-1
Isso gera um httpd do Node.js. que serve os arquivos em seu diretório como arquivos estáticos acessíveis em
http://localhost:8080
Rubi
Se o seu idioma preferido é Ruby ... os Deuses Ruby dizem que isso também funciona:
PHP
Claro que o PHP também tem sua solução.
fonte
$ python -m SimpleHTTPServer
, que produzem a mensagem:Serving HTTP on 0.0.0.0 port 8000 ...
Se você digitar o nome do módulo errado, por exemplo$ python -m SimpleHttpServer
, você receberá a mensagem de erroNo module named SimpleHttpServer
Você receberá uma mensagem de erro semelhante se tiver o python3 instalado (v. python 2.7). Você pode verificar a versão do python usando o comando:$ python --version
. Você também pode especificar a porta para escutar assim:$ python -m SimpleHTTPServer 3333
$ cd ~/angular_projects/1app
, então$ python -m SimpleHTTPServer
. No seu navegador, digite o URLhttp://localhost:8000/index.html
. Você também pode solicitar arquivos em subdiretórios do diretório em que você iniciou o servidor, por exemplo:http://localhost:8000/subdir/hello.html
No Chrome, você pode usar este sinalizador:
Leia mais aqui.
fonte
--allow-file-access-from-files
). Significa usar o Chrome para navegação comum na Web e usar o Chromium como aplicativo padrão para arquivos HTML.fetch()
ainda assim nega isso de qualquer maneira. Você deve usarXMLHttpRequest
de alguma maneiraCorri para isso hoje.
Eu escrevi um código que se parecia com isso:
... mas deveria ter ficado assim:
A única diferença foi a falta
http://
no segundo trecho de código.Só queria divulgar isso no caso de outras pessoas com problemas semelhantes.
fonte
Basta alterar o URL para em
http://localhost
vez delocalhost
. Se você abrir o arquivo html a partir de local, crie um servidor local para veicular esse arquivo html, a maneira mais simples é usá-loWeb Server for Chrome
. Isso resolverá o problema.fonte
Web Server for Chrome
ligação app - é de longe a solução mais simples e mais limpa para a configuração do httpd temporário para Chrome IMOEm um aplicativo Android - por exemplo, para permitir que o JavaScript tenha acesso a ativos via
file:///android_asset/
- usesetAllowFileAccessFromFileURLs(true)
oWebSettings
que você obtém ao acessargetSettings()
oWebView
.fonte
Use
http://
ouhttps://
para criar URLerro :
localhost:8080
solução :
http://localhost:8080
fonte
A maneira mais rápida para mim foi: para usuários do Windows, executar o seu arquivo no Firefox resolvido o problema, ou se você quiser usar o chrome, a maneira mais fácil para mim era instalar o Python 3 e, a partir do prompt de comando run command
python -m http.server
, vá para http: // localhost: 8000 / depois navegue até seus arquivosfonte
Vou listar três abordagens diferentes para resolver esse problema:
npm
pacote muito leve : Instale o servidor ao vivo usandonpm install -g live-server
. Em seguida, vá para esse diretório, abra o terminal e digitelive-server
e pressione Enter, a página será veiculada emlocalhost:8080
. BÔNUS: Ele também suporta recarga a quente por padrão.target
a"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:/ChromeDevSession"
e salve. Em seguida, usando o Chrome, abra a página usandoctrl+o
. NOTA: NÃO use este atalho para navegar regularmente.fonte
Para aqueles no Windows sem Python ou Node.js, ainda existe uma solução leve: Mongoose .
Tudo o que você faz é arrastar o executável para onde quer que a raiz do servidor esteja e executá-lo. Um ícone aparecerá na barra de tarefas e ele navegará para o servidor no navegador padrão.
Além disso, o Z-WAMP é um WAMP 100% portátil que roda em uma única pasta, é incrível. Essa é uma opção se você precisar de um servidor PHP e MySQL rápido.
fonte
Se você usa o Mozilla Firefox, funcionará como esperado, sem problemas;
PS Surpreendentemente, o IntenetExplorer_Edge funciona absolutamente bem !!!
fonte
Solução fácil para quem usa o VS Code
Estou recebendo esse erro há algum tempo. A maioria das respostas funciona. Mas eu encontrei uma solução diferente. Se você não quiser lidar com
node.js
ou qualquer outra solução aqui e estiver trabalhando com um arquivo HTML (chamando funções de outro arquivo js ou buscar json api's), tente usar a extensão do Live Server .Ele permite que você abra um servidor ativo facilmente. E por causa disso cria
localhost
servidor, o problema está resolvendo. Você pode simplesmente iniciar olocalhost
arquivo, abra um arquivo HTML, clique com o botão direito do mouse no editor e clique emOpen with Live Server
.Basicamente, carrega os arquivos usando em
http://localhost/index.html
vez de usarfile://...
.EDITAR
Não é necessário ter um
.html
arquivo. Você pode iniciar o Live Server com atalhos.Espero que ajude alguém :)
fonte
Eu estava recebendo esse erro exato ao carregar um arquivo HTML no navegador que estava usando um arquivo json no diretório local. No meu caso, consegui resolver isso criando um servidor de nó simples que permitia o servidor de conteúdo estático. Deixei o código para esta outra resposta .
fonte
Eu sugiro que você use um mini-servidor para executar esse tipo de aplicativo no host local (se você não estiver usando algum servidor embutido).
Aqui está um que é muito simples de configurar e executar:
fonte
Suspeito que já tenha sido mencionado em algumas respostas, mas modificarei um pouco para ter uma resposta completa (mais fácil de encontrar e usar).
Acesse: https://nodejs.org/en/download/ . Instale o nodejs.
Instale o servidor http executando o comando no prompt de comando
npm install -g http-server
.Mude para o diretório de trabalho, onde
index.html
/yoursome.html
reside.Inicie seu servidor http executando o comando
http-server -c-1
Abra o navegador da Web para
http://localhost:8080
ouhttp://localhost:8080/yoursome.html
- dependendo do seu nome de arquivo html.fonte
Simplesmente diz que o aplicativo deve ser executado em um servidor web. Eu tive o mesmo problema com o chrome, iniciei o tomcat e movi meu aplicativo para lá, e funcionou.
fonte
er. Acabei de encontrar algumas palavras oficiais "A tentativa de carregar módulos AMD remotos não construídos que usam o plug-in dojo / text falhará devido a restrições de segurança de origem cruzada. (As versões construídas dos módulos AMD não são afetadas porque as chamadas ao dojo / text são eliminadas por o sistema de compilação.) " https://dojotoolkit.org/documentation/tutorials/1.10/cdn/
fonte
Uma maneira de trabalhar com o carregamento de arquivos locais é usá-los na pasta do projeto, em vez de fora da pasta do projeto. Crie uma pasta nos arquivos de exemplo do seu projeto, semelhante à maneira como criamos para imagens e substitua a seção em que use o caminho local completo que não seja o caminho do projeto e use o URL relativo do arquivo na pasta do projeto. Funcionou para mim
fonte
Para todos vocês
MacOS
... configure um LaunchAgent simples para ativar esses recursos fascinantes em sua própria cópia do Chrome ...Salve a
plist
, nomeado o que for (launch.chrome.dev.mode.plist
por exemplo),~/Library/LaunchAgents
com conteúdo semelhante a ...Ele deve ser iniciado na inicialização. Mas você pode forçá-lo a fazê-lo a qualquer momento com o comando terminal
launchctl load -w ~/Library/LaunchAgents/launch.chrome.dev.mode.plist
TADA! 😎 💁🏻 🙊 🙏🏾
fonte
Inicie o servidor de aplicativos e você poderá acessar o arquivo no localhost
fonte
Não é possível carregar arquivos locais estáticos (por exemplo: svg) sem servidor. Se você possui o NPM / YARN instalado em sua máquina, pode configurar um servidor http simples usando " http-server "
fonte
Muitos problemas para isso, com o meu problema está faltando '/' exemplo: jquery-1.10.2.js: 8720 XMLHttpRequest não pode carregar http: // localhost: xxxProduct / getList_tagLabels / Deve ser: http: // localhost: xxx / Product / getList_tagLabels /
Espero que ajude quem encontre esse problema.
fonte
Também pude recriar essa mensagem de erro ao usar uma marca de âncora com o seguinte href:
No meu caso, uma tag estava sendo usada para obter o 'Cursor do Ponteiro' e o evento foi realmente controlado por algum evento jQuery on click. Eu removi o href e adicionei uma classe que se aplica:
fonte
Para usuários do Linux Python:
fonte
google-chrome --allow-file-access-from-files <url>
não funcionar e ser mais conciso?Se você insistir em executar o
.html
arquivo localmente e não servi-lo com um servidor da web, poderá impedir que essas solicitações entre origens ocorram em primeiro lugar, disponibilizando os recursos problemáticos em linha.Eu tive esse problema ao tentar atender
.js
arquivosfile://
. Minha solução foi atualizar meu script de construção para substituir as<script src="...">
tags<script>...</script>
. Aqui está umagulp
abordagem para fazer isso:1. corra
npm install --save-dev
para pacotesgulp
,gulp-inline
edel
.2. Depois de criar um
gulpfile.js
no diretório raiz, adicione o seguinte código (basta alterar os caminhos do arquivo para o que mais lhe convier):gulp bundle-for-local
ou atualize seu script de construção para executá-lo automaticamente.Você pode ver o problema e a solução detalhados do meu caso aqui .
fonte
Cordova conseguir isso. Ainda não consigo descobrir como foi a cordova. Ele nem passa pelo shouldInterceptRequest.
Mais tarde, descobri que a chave para carregar qualquer arquivo do local é: myWebView.getSettings (). SetAllowUniversalAccessFromFileURLs (true);
E quando você deseja acessar qualquer recurso http, a visualização na Web faz a verificação com o método OPTIONS, que você pode conceder através do WebViewClient.shouldInterceptRequest retornando uma resposta e, para o método GET / POST a seguir, basta retornar nulo.
fonte
primeiro feche todas as instâncias do chrome.
depois disso siga isto.
Eu usei este comando no mac.
"/ Applications / Google Chrome.app/Contents/MacOS/Google Chrome" - Permitir acesso a arquivos a partir de arquivos
Para Windows:
Como iniciar o html usando o Chrome no modo "- Permitir acesso a arquivos a partir de arquivos"?
fonte
Experimentei isso quando baixei uma página para visualização offline.
Eu só tinha que remover o
integrity="*****"
ecrossorigin="anonymous"
atributos de todo<link>
e<script>
etiquetasfonte