Pregunta

Tengo un archivo javascript en un servidor que no puedo modificar.

Aquí hay una muestra del script que tengo que descargar:

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

Comencé a descargar el script a través de AJAX y a ejecutarlo, pero me encontré con el problema "document.write no se puede ejecutar en una llamada asincrónica".

Entonces quería descargar el script como texto plano y tomar lo que necesito de la respuesta y colocarlo donde debería ir en mi página html sin modificar el 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);
});

Pero AJAX arroja un error cuando hago la solicitud de descarga usando dataType = "text".¿Hay alguna manera de solucionar esto y descargarlo como texto?

PD:El script es para una aplicación privilegiada de Firefox OS, por lo que no puedo colocar el script directamente en la página html porque el CSP de seguridad no lo permite (https://developer.mozilla.org/en-US/Apps/CSP).

¿Fue útil?

Solución

Ya que pareces capaz de correr el script tuvo éxito de alguna manera, aquí hay una idea terrible que podría funcionar:Sobrescribir document.write.

Antes de ejecutar el script, haga:

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

dónde handleTagStringInApp es una función que usted escribe y que procesa la cadena de etiquetas de alguna manera.Esto es básicamente JSONP, pero no puedes ajustar el nombre de la devolución de llamada para que sea algo discreto o útil y en su lugar debes usar el nombre de la devolución de llamada. document.write.

Tenga en cuenta que esto será Muy mal si realmente necesita usar algo más en su aplicación document.write.(Puedes solucionar esto en tu propio código manteniendo una referencia al código real). document.write, por ejemplo, usando var realDocWrite = document.write; al cargar la página y llamarla con realDocWrite.call(document, "whatever").)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top