xmlhttp.responseText可以包含<script type =“text / javascript src =”...“=”“> </script>并加载?

时间:2011-01-23 18:05:08

标签: php javascript xmlhttprequest

该脚本执行window.open('',...),然后通过执行innerHTML = xmlhttp.responseText写入xmlhttp.responseText,但脚本未加载。

3 个答案:

答案 0 :(得分:2)

通常,您会将xmlhttp请求响应作为纯Javascript获取,然后使用Javascript eval()函数:

function callback() {
    var result = xmlHttp.responseText;
    eval(result);
}

在这种情况下,您不会将其视为HTML。相反,你会返回纯代码。区别:

请勿在您调用的页面中执行此操作

<script type="text/javascript">
alert('xmlhttprequest loaded!');
</script>

执行此操作

alert('xmlhttprequest loaded!');

所以,实际上就是这样:

function callback() {
    var result = xmlHttp.responseText;
    eval("alert('xmlhttprequest loaded!');");
}

但你不希望这种情况发生:

function callback() {
    var result = xmlHttp.responseText;
    eval("<script>alert('xmlhttprequest loaded!');</script>");
}

这样做有一些问题,例如eval可能很慢。 Google javascript eval可以查看其他人的评论。

===编辑===

使用DOM方法而不是xmlhttprequest可能实际上是原始海报需要在这里做的,它会动态加载Google验证码。

<html>
<head></head>
<body>
<script type="text/javascript">

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "http://google.com/captcha/location";
head.appendChild(script);

</script>
</body>
</html>

此外,如果您需要它降落在某处,您可以执行以下操作:

<html>
<head></head>
<body>
<div id="captcha">
</div>
<script type="text/javascript">

var captcha = document.getElementById('captcha');
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "http://google.com/captcha/location";
captcha.appendChild(script);

</script>
</body>
</html>

答案 1 :(得分:1)

查看this write-up

 eval(xmlhttp.responseText);

答案 2 :(得分:0)

您可能希望在javascript中评估responseText。

您可能希望确保responseText来自您自己的服务器端系统,以避免XSS攻击。