J'ai une variable javascript contenant du HTML échappé. Il peut y avoir des balises de script à l'intérieur du HTML, comme ceci:Problème d'injection de code HTML et de script Javascript dans IE
var valueToInsert = "%3Cscript%20type%3D%22text/javascript%22%3Ealert%28%27test%27%29%3B%3C/script%3E%0A%3Cscript%20type%3D%22text/javascript%22%20src%3D%22http%3A//devserver/testinclude.js%22%3E%3C/script%3E%0A%3Cimg%20src%3D%22http%3A//www.footballpictures.net/data/media/131/manchester_united_logo.jpg%22%20/%3E"
Je veux ajouter ceci au DOM, et obtenir toutes les javascript tir comme prévu. En ce moment je suis en utilisant cette approche:
var div = document.createElement("div");
div.innerHTML = unescape(valueToInsert);
document.body.appendChild(div);
Dans IE, au moment où je mis div.innerHTML - sont supprimés tous les balises de script.
Si j'utilise jQuery pour et faire ceci:
$(document.body).append(valueToInsert)
Tout fonctionne très bien. La mauvaise chose est, que je ne peux pas utiliser jQuery car ce code sera ajouté aux sites que je ne suis pas en contrôle de l'utilisation de certains scripts "déjà mis en œuvre".
Est-ce que quelqu'un a un truc? Si jQuery peut le faire, cela doit-il être possible?
J'ai eu un autre problème dans Opera. J'ai changé le script d'injection pour être ceci: (ne fonctionne toujours pas dans IE)
var div = document.createElement("div");
div.innerHTML = unescape(valueToInsert);
var a = new Array();
for (var i = 0; i < div.childNodes.length; i++)
a.push(div.childNodes[i]);
for (var i = 0; i < a.length; i++)
{
if (a[i].nodeName == "SCRIPT" && a[i].getAttribute("src") != null && a[i].getAttribute("src") != "" && typeof (a[i].getAttribute("src")) != "undefined")
{
var scriptTag = document.createElement("script");
scriptTag.src = a[i].getAttribute("src");
scriptTag.type = "text/javascript";
document.body.appendChild(scriptTag);
}
else if (a[i].nodeName == "SCRIPT")
{
eval(a[i].innerHTML);
}
else
{
document.body.appendChild(a[i]);
}
}
Impossible de faire cela, car il efface la page lorsqu'il est exécuté après le rendu de la page. – MartinHN