该脚本执行window.open('',...),然后通过执行innerHTML = xmlhttp.responseText写入xmlhttp.responseText,但脚本未加载。
答案 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)
eval(xmlhttp.responseText);
答案 2 :(得分:0)
您可能希望在javascript中评估responseText。
您可能希望确保responseText来自您自己的服务器端系统,以避免XSS攻击。