如何删除/停止在jquery中执行脚本

时间:2016-11-12 11:14:43

标签: javascript jquery ajax node.js

我想将<script> ...... </script>作为使用ajax从其他页面返回的文本(或非可执行代码)。

<div id="page"></div>

 $.ajax({
        url: "http://example.com",
        type: "GET",
        crossDomain: true,
        dataType: "text/html",
        success: function(response) {
            console.log(response);
            $('#page').append(response);
        },
        error: function(xhr, status) {
            alert("error");
        }
    });

我的问题是上面的代码执行response内部的脚本,如果发生错误,我的页面将不会执行,程序将停止。所以我想制作script not executable我该怎么做?

或如何制作任何code inside script blank

假设我的脚本是这样的

<script type="text/javascript">
  // some erroneous code or some resource load which failed verification
  console.log('i want to remove every code');
</script>

2 个答案:

答案 0 :(得分:0)

我认为你必须做3个步骤

  1. 将收到的htmlstring转换为DOM元素,如

      parser = new DOMParser()
                doc = parser.parseFromString(response, "text/xml");
    
  2. 或使用

    var doc = document.createElement('div');
    doc.innerHTML = response;
    
    1. 然后找到所有脚本标签init

      allScriptTags = doc.find( "script" )

    2. 在allScriptTags上运行循环并删除所有脚本标记

    3. allScriptTags.forEach(
        function(item) {
            item.remove();
            // or item.parentNode.removeChild(item); for older browsers (Edge-)
      });
      

      最后,

           $.ajax({
                  url: "http://example.com",
                  type: "GET",
                  crossDomain: true,
                  dataType: "text/html",
                  success: function(response) {
                      console.log(response);
                      parser = new DOMParser()
                      doc = parser.parseFromString(response, "text/xml");
                      allScriptTags = doc.find( "script" )
                      allScriptTags.forEach(
                          function(item) {
                              item.remove();
                              // or item.parentNode.removeChild(item); for older browsers (Edge-)
                      });
                      $('#page').append(doc);
                  },
                  error: function(xhr, status) {
                      alert("error");
                  }
              }); 
      

      我希望它会有所帮助。

      如果它不起作用,请尝试使用字符串操作从删除htmlstring中删除标记。

      Plunker http://plnkr.co/edit/OUi8U945MIMFZoWQpBGy?p=preview

答案 1 :(得分:0)

使用&#34;&lt; pre&gt;&#34;或(html5支持)标记以按原样显示代码。