微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自ajax的javascript无法正常执行

使用Ajax,我创建了一种控制台,允许我动态执行一些 PHP函数.

它看起来像这个

screenshot

问题是在一堆命令之后,控制台变得难以阅读.所以我创建了一个名为“wipe();”的javascript函数,它清除了< div>包含控制台.

我用chrome的开发工具(javascript控制台)测试了这个功能,它运行得很好.

但是当我尝试通过使PHP-AJAX返回“< script> wipe();< / script>”来调用函数时,它不起作用.它什么都不做.

我在互联网上看到所有“< script>< / script>”彼此独立工作,但您可以调用< script>函数< / script>来自另一个< script>< / script>块.

那为什么不这样做呢?

这是PHP代码

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] 举报,一经查实,本站将立刻删除。

相关推荐