Se Javascript é permitido apenas para acessar scripts do mesmo domínio, como um site pode criar mashups que precisam ler e modificar o conteúdo de outro domínio?
Se Javascript é permitido apenas para acessar scripts do mesmo domínio, como um site pode criar mashups que precisam ler e modificar o conteúdo de outro domínio?
Respostas:
Se a API que você está tentando acessar suportar JSONP , você só precisará fornecer um nome de função javascript na sua solicitação. O JSONP retornará um javascript como o myfunc({the:data});
qual você pode executar como um javascript comum, e é por isso que você criaria uma nova <script src="www.website.com/somecall?jsonp=myfunc">
tag para "enviar uma solicitação" (o jQuery faz isso automaticamente se você usar type: jsonp
em $.ajax
solicitações).
A desvantagem é que ela requer que o provedor da API suporte JSONP.
O Flash pode acessar conteúdo entre domínios, desde que o site de destino tenha um crossdomain.xml
arquivo na raiz que diga que é permitido, o que geralmente acontece em servidores que fornecem uma API.
A desvantagem é que ele requer Flash no navegador do usuário e que o site do qual você obtém dados deve ter um crossdomain.xml que permita solicitações entre domínios.
Linguagens do lado do servidor, como PHP, não têm restrições de BS no mesmo domínio, portanto, você pode ter um script que atua como proxy (por exemplo, faça o download através de uma extensão http como cURL).
O benefício adicional é que você pode limpar os dados (ou mesmo mashup de várias fontes) no servidor, antes de encaminhá-los para sua página da web / javascript, para que você possa extrair apenas a parte útil dos dados, o que é bom ao fazer aplicativos da web móveis onde a largura de banda pode ser um problema.
A desvantagem é que todas as solicitações precisam passar pelo servidor, o que aumenta a carga no servidor.
No entanto, o benefício é que ele funcionaria com qualquer recurso, pois não requer que o destino suporte crossdomain ou jsonp. Então, se nada mais funcionar, isso funcionaria.
O Internet Explorer possui solicitação entre domínios
O Firefox 3.5+ possui o padrão de compartilhamento de origem , mas requer o recurso que você está tentando acessar para incluir cabeçalhos especiais, por exemplo, no PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
Alguns outros navegadores principais também suportam isso ; portanto, se você não precisar suportar navegadores antigos e conseguir os recursos que está tentando acessar para enviar esses cabeçalhos, essa pode ser sua melhor aposta, caso contrário, o servidor script seria minha recomendação.
O Firefox também tem uma configuração de usuário capability.policy.default.XMLHttpRequest.open
, mas eu não contaria com a alteração de uma configuração em seu navegador.
Você pode usar a API (de outro domínio) para isso. Seu Javascript chamará o arquivo PHP (ou outro arquivo de script) que está no seu servidor Web (seu domínio), que chamará a API (de outro domínio usando CURL) e obterá a resposta.