Permitir que o Google Chrome use XMLHttpRequest para carregar um URL de um arquivo local

125

Ao tentar fazer uma solicitação HTTP usando XMLHttpRequest de um arquivo local, ela basicamente falha devido à Access-Control-Allow-Originviolação.

No entanto, eu mesmo estou usando a página da Web local, por isso fiquei pensando se há alguma maneira de fazer o Google Chrome permitir essas solicitações, que são de um arquivo local para um URL na Internet.

Por exemplo, $.get('http://www.google.com/')falha ao executar em um arquivo local, mas eu próprio escrevi a página e a estou usando, por isso seria extremamente útil se eu pudesse suprimi-la e carregar a URL.

Então, como posso permitir que o Google Chrome carregue URLs usando XMLHttpRequest de arquivos locais?

pimvdb
fonte
1
Access-Control-Allow-Origin: nullpelo site funciona. (ofc. não pelo google.com.br)
inf3rno 27/05
3
@JessamynSmith: A ordem das respostas muda e a resposta aceita também pode ser alterada; portanto, é melhor vincular a uma resposta do que dizer algo como 'a resposta abaixo da resposta aceita'. Use o URL ao qual o link 'compartilhar' da resposta leva.
Michael Scheper
2
@MichaelScheper Seu comentário é um tanto irrelevante, pois colei o comando que funcionou. No entanto, caso haja valor em incluir o link, excluí e reposicionei. No Chrome moderno, os erros se parecem com: XMLHttpRequest não pode carregar o arquivo: ///path/to/file/css/base.css. As solicitações de origem cruzada são suportadas apenas para esquemas de protocolo: http, dados, chrome, chrome-extension, https, chrome-extension-resource. Esta resposta stackoverflow.com/a/4819114/1649165 trabalhou para mim, isto é, executar o Chrome a partir da linha de comando: cromo --allow-file-access-from-arquivos
Jessamyn Smith
@JessamynSmith: Desculpe, você pensou que meu conselho era irrelevante. Como você achou que uma resposta em particular era relevante, achei que você gostaria de fazer um comentário do seu futuro. Meu erro.
Michael Scheper

Respostas:

49

chrome de inicialização com --disable-web-security

No Windows:

chrome.exe --disable-web-security

No Mac:

open /Applications/Google\ Chrome.app/ --args --disable-web-security

Isso permitirá solicitações entre domínios.
Não sei se isso também funciona para arquivos locais, mas avise-nos!

E mencione, isso faz exatamente o que você espera, desabilita a segurança da web, portanto, tenha cuidado com ela.

jAndy
fonte
Você também pode usar o Safari em um Mac. Ele permite que o AJAX arquive arquivos locais por padrão quando a solicitação é feita a partir de um arquivo local. Além disso, sobre '.exe', nada no Q é dito sobre o Windows. Pim é um desenvolvedor de Windows, mas ainda assim, nada foi dito sobre o Windows.
1
Sim, eu estou no Windows, desculpe por isso. Vai tentar isso agora, obrigado. A propósito, estou executando o Chrome sempre quando meu computador está ligado. Existe uma maneira de permitir apenas solicitações entre domínios com arquivos locais ou apenas em uma guia específica? Porque desta forma, eu realmente não pode navegar na Internet de forma segura, ao mesmo tempo ...
pimvdb
1
Acabei de baixar a versão mais recente do Chromium para ter uma versão autônoma e insegura em execução nos testes e o Chrome "real" instalado para uma navegação segura na Internet. E funciona, obrigado!
Pimvdb
@ Tom - você deve ser capaz de fazer isso no Mac com o Safari, sem quaisquer alterações de configuração, desde que você use o "file: ///" protocolo e não " localhost "
Perto Privman
2
Eu tentei no Safari 10.1 e ele me deu: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.portanto, a declaração sobre o navegador Safari a partir deste segmento não é mais válida.
Michal Cichon
233

Usar o --disable-web-securityswitch é bastante perigoso ! Por que desativar a segurança enquanto você pode permitir que XMLHttpRequest acesse arquivos de outros arquivos usando o --allow-file-access-from-filesswitch?

Antes de usar esses comandos, encerre todas as instâncias em execução do Chrome.

No Windows:

chrome.exe --allow-file-access-from-files

No Mac:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files

Discussões sobre esse "recurso" do Chrome:

Konstantin Smolyanin
fonte
5
É possível tornar esse o comportamento padrão sem ter que abrir sempre um terminal / linha de comando ou um atalho personalizado?
precisa saber é o seguinte
1
@Kokodoko Eu acho que não.
Konstantin Smolyanin
2
@ JoshH Concordo plenamente que é muito melhor usar o servidor da web local para o desenvolvimento do site do que acessar os arquivos locais diretamente pelo navegador. No entanto, a pergunta exata foi feita e eu acabei de responder.
Konstantin Smolyanin
13
Caso outra pessoa tente isso: este sinalizador não está disponível / pode ser modificado emchrome://flags
Blaise
5
@ pimvdb Eu acho que você deve marcar este como a resposta aceita.
Chris-l
21

Versão para Mac. A partir do terminal:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files
Nek
fonte
Vejo vários votos negativos aqui. Você pode elaborar o que há de errado com a minha resposta?
Nek
Como outras respostas explicam, não é aconselhável sugerir desativar toda a segurança da Web quando houver uma opção específica que mude essa única coisa.
Curiousdannii
seria bom ter uma solução mais permanente. Este assume que o usuário conhece antecipadamente e também requer um relançamento do chrome.
Michael Dunn
3

No Ubuntu:

chromium-browser --disable-web-security

Para mais detalhes / opções:

http://peter.sh/experiments/chromium-command-line-switches/

Referenciado de

Taimoor Changaiz
fonte
Eu acho que especificar arquivos será mais seguro `google-chrome - Permitir acesso a arquivos a partir de arquivos ~ / foo`
Muhammed Moussa
Isso é um pouco amplo para o caso de uso específico. Mas adereços para uma solução independentemente
Michael Dunn