Question

J'ai un fichier javascript sur un serveur que je ne peux pas modifier.

Voici un exemple du script que je dois télécharger :

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

J'ai commencé à télécharger le script via AJAX et à l'exécuter, mais je suis tombé sur le problème "document.write ne peut pas être exécuté lors d'un appel asynchrone".

Je voulais donc télécharger le script sous forme de texte brut, prendre ce dont j'avais besoin de la réponse et le placer là où il devrait aller dans ma page HTML sans modifier le 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);
});

Mais AJAX génère une erreur lorsque je fais la demande de téléchargement en utilisant dataType = "text".Existe-t-il un moyen de contourner ce problème et de le télécharger sous forme de texte ?

P.S :Le script est destiné à une application privilégiée Firefox OS, je ne peux donc pas mettre le script directement dans la page html car le CSP de sécurité ne le permet pas (https://developer.mozilla.org/en-US/Apps/CSP).

Était-ce utile?

La solution

Puisque tu sembles capable de courir le script avec succès d'une manière ou d'une autre, voici une terrible idée qui pourrait fonctionner :écraser document.write.

Avant d'exécuter le script, faites :

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

handleTagStringInApp est une fonction que vous écrivez qui traite la chaîne de balise d'une manière ou d'une autre.Il s'agit essentiellement de JSONP, mais vous ne pouvez pas ajuster le nom de rappel pour qu'il soit discret ou utile et devez plutôt utiliser le nom de rappel. document.write.

Notez que ce sera vraiment mauvais si quelque chose d'autre dans votre application doit réellement être utilisé document.write.(Vous pouvez contourner ce problème dans votre propre code en gardant une référence au réel document.write, par exemple, en utilisant var realDocWrite = document.write; au chargement de la page et en l'appelant avec realDocWrite.call(document, "whatever").)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top