使用Ajax,我创建了一种控制台,允许我动态执行一些
PHP函数.
问题是在一堆命令之后,控制台变得难以阅读.所以我创建了一个名为“wipe();”的javascript函数,它清除了< div>包含控制台.
我用chrome的开发工具(javascript控制台)测试了这个功能,它运行得很好.
但是当我尝试通过使PHP-AJAX返回“< script> wipe();< / script>”来调用此函数时,它不起作用.它什么都不做.
我在互联网上看到所有“< script>< / script>”彼此独立工作,但您可以调用< script>函数< / script>来自另一个< script>< / script>块.
那为什么不这样做呢?
echo '<script>wipe();</script>';
这是第一个< script>块:
var xmlhttp = new XMLHttpRequest(); var span = document.getElementById("screen"); function send(data) { window.setInterval(function() { var elem = document.getElementById('screen'); xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET","./_rcons-transmetter.PHP?data="+data,true) xmlhttp.onloadend = function() { span.innerHTML = span.innerHTML+escapeHtml(data)+'<br>'+xmlhttp.responseText+'<br><br>'; } xmlhttp.send(); } function wipe(){ span.innerHTML = ''; }
解决方法
为避免安全问题(如
cross-site scripting攻击),HTML5指定< script>标签通过innerHTML
should not execute插入.
执行脚本的一种方法是使用eval()评估html.警告:使用eval可能很危险.
var xmlhttp = new XMLHttpRequest(); var span = document.getElementById("screen"); function send(data) { window.setInterval(function() { var elem = document.getElementById('screen'); xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET","./_rcons-transmetter.PHP?data=" + data,true) xmlhttp.onloadend = function() { span.innerHTML = span.innerHTML + escapeHtml(data) + '<br>' + xmlhttp.responseText + '<br><br>'; evalJSFromHtml(span.innerHTML); } xmlhttp.send(); } function wipe() { span.innerHTML = ''; } function evalJSFromHtml(html) { var newElement = document.createElement('div'); newElement.innerHTML = html; var scripts = newElement.getElementsByTagName("script"); for (var i = 0; i < scripts.length; ++i) { var script = scripts[i]; eval(script.innerHTML); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。