我有一个包含转义HTML的JavaScript变量。有可能是内部的HTML脚本标记,像这样:IE中的Javascript HTML和脚本注入问题
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"
我希望把这段DOM,并获得预期解雇所有的JavaScript。现在我正在使用这种方法:
var div = document.createElement("div");
div.innerHTML = unescape(valueToInsert);
document.body.appendChild(div);
在IE中,当我设置div.innerHTML - 所有脚本标记被删除。
如果我使用jQuery和做到这一点:
$(document.body).append(valueToInsert)
这一切工作正常。糟糕的是,我无法使用jQuery,因为这些代码将被添加到网站中,我无法控制使用一些“已实施”的脚本。
有人有一招吗?如果jQuery能做到这一点,它一定是可能的?
我在Opera中遇到了另一个问题。我改变注射脚本是这样的:(仍然在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]);
}
}
不能这样做,因为它在页面渲染后执行时会清除页面。 – MartinHN 2010-04-19 13:37:18