Estou tentando criar um site que pode ser baixado e executado localmente, iniciando seu arquivo de índice.
Todos os arquivos são locais, nenhum recurso é usado online.
Quando tento usar o plug-in AJAXSLT para o jQuery para processar um arquivo XML com um modelo XSL (em subdiretórios), recebo os seguintes erros:
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.
O arquivo de índice que faz a solicitação é file:///C:/path/to/XSL%20Website/index.html
enquanto os arquivos JavaScript usados estão armazenados file:///C:/path/to/XSL%20Website/assets/js/
.
Como posso fazer para corrigir esse problema?
Essencialmente, a única maneira de lidar com isso é ter um servidor da Web em execução no host local e atendê-los a partir daí.
Não é seguro para um navegador permitir que uma solicitação ajax acesse qualquer arquivo no seu computador; portanto, a maioria dos navegadores parece tratar solicitações "file: //" como não tendo origem para os fins da " mesma política de origem "
Iniciar um servidor da Web pode ser tão trivial quanto
cd
entrar no diretório em que os arquivos estão:fonte
python -m http.server
.Aqui está um AppleScript que iniciará o Chrome com a opção - Permitir acesso a arquivos a partir de arquivos ativada, para os desenvolvedores do OSX / Chrome por aí:
fonte
open -a 'Google Chrome' --args --allow-file-access-from-files
.Esta solução permitirá que você carregue um script local usando jQuery.getScript (). Essa é uma configuração global, mas você também pode definir a opção crossDomain por solicitação.
fonte
Que tal usar a função javascript FileReader para abrir o arquivo local, ou seja:
Agora clique no
Choose file
botão e navegue até o arquivofile:///C:/path/to/XSL%20Website/data/home.xml
fonte
Inicie o chrome assim para ignorar esta restrição:
open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files
.Derivado do comentário de Josh Lee, mas eu precisava especificar o caminho completo para o Google Chrome para evitar que o Google Chrome fosse aberto na minha partição do Windows (no Parallels).
fonte
A maneira como acabei de solucionar isso não é usar o XMLHTTPRequest, mas incluir os dados necessários em um arquivo javascript separado. (No meu caso, eu precisava de um blob SQLite binário para usar com https://github.com/kripken/sql.js/ )
Criei um arquivo chamado
base64_data.js
(e useibtoa()
para converter os dados necessários e inseri-los em<div>
para poder copiá-los).e incluiu os dados no html como javascript normal:
Eu imagino que seria trivial modificar isso para ler JSON, talvez até XML; Vou deixar isso como um exercício para o leitor;)
fonte
Você pode tentar colocar
'Access-Control-Allow-Origin':'*'
emresponse.writeHead(, {[here]})
.fonte
use o 'servidor da web para o aplicativo Chrome'. (você realmente o possui no seu PC, quer você saiba ou não. basta pesquisar em cortana!). abra-o e clique em 'escolher arquivo' escolha a pasta com o seu arquivo. na verdade, não selecione seu arquivo. selecione sua pasta de arquivos e clique no (s) link (s) no botão 'escolher pasta'.
se não o levar ao arquivo, adicione o nome do arquivo aos urs. como isso:
link para o servidor web para chrome: clique em mim
fonte