Pergunta

Eu tenho um arquivo javascript em um servidor que eu não posso modificar.

Aqui está um exemplo de script que eu tenho para fazer o download:

var tags = '';
tags += '<a href="#somelink"><img src="someimage.gif"/></a>;
document.write(tags);

Eu comecei a baixar o script via AJAX e executá-lo, mas esbarrei com o documento".gravação não pode ser executada na chamada assíncrona" problema.

Então, eu queria baixar o script como um texto simples e pegar o que eu preciso da resposta e colocá-lo onde ele deve ir na minha página html sem modyfing o script original.

$.ajax({
    type: "GET",
    url: "http://myurlexample.com",
    dataType: "text",
}).success(function(msg){
    console && console.log("The script was downloaded as text: "+msg);
}).error(function(object,status,errortxt){
    console && console.log("The script wasn't downloaded as text. The error:"+ errortxt);
});

Mas o AJAX lança um erro quando eu faço o pedido de transferência usando dataType = "text".Existe alguma maneira de contornar esse e realmente baixá-lo como um texto?

P. S:O script é para o Firefox OS privilegiada app, então eu não posso colocar o script diretamente no html da página, porque a segurança CSP não permite que ele (https://developer.mozilla.org/en-US/Apps/CSP).

Foi útil?

Solução

Já que você parece capaz de executar o script com êxito, de alguma forma, aqui está uma idéia terrível que pode funcionar:substituir document.write.

Antes de executar o script, execute:

document.write = function(msg) {
    handleTagStringInApp(msg);
    delete document.write; // revert to original document.write when done
};
// now load execute the script...

onde handleTagStringInApp é uma função que você escrever que os processos da cadeia de marca de alguma forma.Este é basicallyJSONP, mas você não pode ajustar o retorno de chamada nome para ser algo discreto ou útil e, em vez disso, deve usar o retorno de chamada nome document.write.

Note que este será muito ruim se qualquer outra coisa em seu aplicativo, na verdade, precisa usar document.write.(Você pode contornar isso no seu próprio código, mantendo uma referência para o real document.write, por exemplo, usando var realDocWrite = document.write; no carregamento da página e chamando-o com realDocWrite.call(document, "whatever").)

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