Pergunta

Atualmente estou contando com um script de proxy para lidar com este problema de política única origem. é lento, e cria sobrecarga. Para não mencionar, javascript não é processado.

Existe uma alternativa a trabalhar lá fora?

Foi útil?

Solução

Oh querida, eu acho que a solução que você está procurando com iframes. No entanto, a abordagem iframe é tanto um compromisso mental e técnica. Sugiro que comece com este guia:

comunicação entre domínios com iframes

A abordagem alternativa é obter dados de outro servidor de forma assíncrona usando tags de script e json:

<script src="http://remotesite.com/path/to/script/blah.js"></script>

Você pode criar um novo elemento tag SCRIPT para passar e dados de carga e acréscimo para DOM ou inserir a marcação em um elementos innerHTML.

Eu tenho certeza que você pode encontrar alguns exemplos detalhados e formas de implementar, mas uma coisa que você deve manter uma faixa de com o novo método de script está adicionando tantos tot ele DOM. Esta ajuda força e fornecer um ponto de partida para você:

function require (url, callback) {
    if (!isScriptLoaded(url)) { 
        document.write('<script src="' + url + '" type="text/javascript" charset="utf-8"><\/script>');

        if (callback) {
            callback();
        }
    }
}

function isScriptLoaded(src) {
    var scriptsLoaded =  {};
    var scriptTags    = document.getElementsByTagName("script");

    for (var i = 0, script; script = scriptTags[i]; i++) {
        if (script.src) { 
            scriptsLoaded[script.src] = 1;
        }
    };

    if (scriptsLoaded[src]) {
        return true; 
    }

    return false;
}

(não testado, mas deve trabalho!)

De qualquer maneira -. Boa sorte

Outras dicas

Se você pode fornecer um nome de retorno de chamada como um parâmetro para o serviço que fornece o código JavaScript em questão, então você pode anexar uma tag script para seu documento, com um apontador atributo src para o serviço de chamada. Caso contrário, você está sem sorte.

Use um window.postMessage(message, origin) iframe e tentar (seria parent.postMessage do iframe e iframeElement.contentWindow.postMessage da página superior) para todos os mais recentes dos principais navegadores (Firefox, IE, Safari, Chrome, etc.) e mudando / window.name polling para o velho browsers.

JSON-P é praticamente ideal para este tipo de coisa. Se você estiver usando jQuery, ou bibliotecas JavaScript semelhantes, seu trabalho é ainda mais fácil:

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

É claro que vai depender exatamente o que você está tentando fazer que irá determinar se deve usar JSON-P, iframes escondidos, postMessage, proxies em Flash, ou qualquer outra solução exótica.

Se você controla ambos os domínios e só se preocupam com o Firefox 3.5+, você pode usar o XMLHttpRequest objeto e configurar permissões com Controle de Acesso .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top