Eu criei um pequeno arquivo xslt para criar uma saída html chamada weather.xsl com o código da seguinte maneira:
<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>
Eu quero carregar a saída html em uma div em um arquivo html que estou tentando fazer usando o jQuery da seguinte maneira:
<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>
Mas estou recebendo o seguinte erro: Origem nula não é permitida pelo Access-Control-Allow-Origin.
Eu li sobre a adição de um cabeçalho ao xslt, mas não tenho certeza de como fazer isso; portanto, qualquer ajuda seria apreciada e, se o carregamento na saída html não puder ser feito dessa maneira, aconselhamento sobre outras formas fazer isso seria ótimo.
javascript
null
xmlhttprequest
cors
localhost
dudledok
fonte
fonte
load
? Não existe nenhum caminho?Respostas:
Origin
null
é o sistema de arquivos local, o que sugere que você esteja carregando a página HTML que faz aload
chamada por meio de umafile:///
URL (por exemplo, basta clicar duas vezes nela em um navegador de arquivos local ou similar). Navegadores diferentes adotam abordagens diferentes para aplicar a Política de mesma origem a arquivos locais.Meu palpite é que você está vendo isso usando o Chrome. As regras do Chrome para aplicar o SOP aos arquivos locais são muito rígidas, não permitindo o carregamento de arquivos do mesmo diretório que o documento. O Opera também. Alguns outros navegadores, como o Firefox, permitem acesso limitado aos arquivos locais. Mas, basicamente, o uso do ajax com recursos locais não funcionará em vários navegadores.
Se você está apenas testando algo localmente que realmente implantará na Web, em vez de usar arquivos locais, instale um servidor Web simples e teste através de
http://
URLs. Isso fornece uma imagem de segurança muito mais precisa.fonte
$('#result').load('weather.xsl');
), isso não deve acontecer, porque a solicitação está claramente na mesma origem. Se você está tentando carregar de algum outro lugar (por exemplo,$('#result').load('http://somewhere.else/weather.xsl');
), está executando o SOP novamente, mas de uma maneira diferente. As solicitações Ajax são restritas à mesma origem (consulte o link na resposta) ou, se você estiver usando um navegador habilitado para CORS e o servidor suportar CORs, o servidor poderá escolher se deseja permitir a solicitação entre origens.python -m SimpleHTTPServer
de uma linha de comando e fui para o localhost: 8000, trabalhou para mim. O Python vem pré-instalado com o Mac OS X; pode ser necessário instalar se estiver usando outro sistema operacional.Chrome e Safari tem uma restrição no uso de ajax com recursos locais. É por isso que está lançando um erro como
Solução: use o Firefox ou faça o upload de seus dados para um servidor temporário. Se você ainda deseja usar o Chrome, inicie-o com a opção abaixo;
Mais informações sobre como adicionar o parâmetro acima ao seu Chrome: Clique com o botão direito do mouse no ícone do Chrome na barra de tarefas, clique com o botão direito do mouse no Google Chrome na janela pop-up e clique em Propriedades e adicione o parâmetro acima na caixa de texto Destino na guia Atalho. Vai gostar como abaixo;
Espero que isso ajude!
fonte
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files &
Observe o final & é apenas para continuar usando o Terminal e não é necessário. NOTA: Se você fechar o terminal, ele fechará a janela do Chrome.Só queria acrescentar que a resposta "execute um servidor da web" parece bastante assustadora, mas se você tem python no seu sistema (instalado por padrão pelo menos no MacOS e em qualquer distribuição Linux), é tão fácil quanto:
ou
Portanto, se você tiver seu arquivo html
myfile.html
em uma pasta, digamosmydir
, tudo o que você precisa fazer é:Em seguida, aponte seu navegador para:
E você está pronto! Funciona em todos os navegadores , sem desativar a segurança da web, permitir arquivos locais ou até mesmo reiniciar o navegador com opções de linha de comando.
fonte
python -m SimpleHTTPServer 8080
Gostaria de acrescentar humildemente que, de acordo com esta fonte do SO: https://stackoverflow.com/a/14671362/1743693 , esse tipo de problema agora está parcialmente resolvido simplesmente usando a seguinte instrução jQuery:
Eu tentei no IE10.0.9200 e funcionou imediatamente (usando o jquery-1.9.0.js).
No chrome 28.0.1500.95 - esta instrução não funciona (isso acontece todo como David reclama nos comentários no link acima)
A execução do chrome com --allow-file-access-from-files não funcionou para mim (como as reivindicações de Maistora acima)
fonte
Adicionando um pouco para usar a solução de Gokhan para usar:
Agora você só precisa acrescentar o texto acima no texto de destino, seguido de um espaço. feche todas as instâncias do navegador chrome após adicionar a propriedade acima. Agora reinicie o chrome pelo ícone em que você adicionou esta propriedade. Deve funcionar para todos.
fonte
Eu estava procurando uma solução para fazer uma solicitação XHR para um servidor a partir de um arquivo html local e encontrei uma solução usando o Chrome e o PHP. (sem Jquery)
Javascripts:
O cabeçalho de solicitação do meu Chrome
Origin: null
Meu cabeçalho de resposta do PHP (observe que 'null' é uma string ). HTTP_REFERER permite origem cruzada de um servidor remoto para outro.
Consegui conectar com sucesso ao meu servidor. Você pode desconsiderar os cabeçalhos de credenciais, mas isso funciona para mim com o Apache
AuthType Basic
ativadoEu testei a compatibilidade com FF e Opera, funciona em muitos casos, como:
De um IP da LAN da VM (192.168.0.x) de volta para o IP (público) da WAN da VM: porta
De um IP da LAN da VM de volta para um nome de domínio do servidor remoto.
De um arquivo .HTML local para o IP da LAN da VM e / ou IP da WAN da VM: porta,
De um arquivo .HTML local para um nome de domínio do servidor remoto.
E assim por diante.
fonte
Você pode carregar um arquivo Javascript local (na árvore abaixo da
file:/
página de origem) usando a tag source:Se você codificar sua entrada em Javascript, como neste caso:
mydata.js :
(isso é mais fácil para json), você terá seus 'dados' em uma variável global Javascript para usar como desejar.
fonte