search

Home  >  Q&A  >  body text

javascript - HTML Tidy无法正常显示脚本标签怎么办?

我用的是PHP编写的HTML Tidy,但是Javascript字符串上的一个<script>标签,它的运作有些异常。我输入的代码如下: " <html> <script> var t='<script>'; </script> </html> " HTML Tidy输出代码如下: " <html> <script> //'; //]]> </script> </html> " 上面将</script></html>解译成了脚本的一部分。然后它又添加了一个</script></html>禁止打开标签。我尝试使用了HTML Tidy的网页版来解决这个问题,但是结果依旧显示错误运行。我该如何解决这个问题呢?

原问题:HTML Tidy fails on script tag in JavaScript string literal

阿神阿神2896 days ago359

reply all(1)I'll reply

  • 阿神

    阿神2017-04-10 13:14:49

    答:arch
    依据经验来看,我觉得你可以用//'<\/script>'控制某种算法,来阻止这种错误发生:

    <html>
    <script>
    var t='<script><'+'/script>'; //'<\/script>'
    </script>
    </html>
    

    clean-up算法如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
    
    <html>
    <head>
    
       <script>
    var t='<script><'+'/script>'; //'<\/script>'
       </script>
    
       <title></title>
    </head>
    
    <body>
    </body>
    </html>
    

    我觉得,可能是因为clean-up算法检测到了两个字符串<script>,所以它才会显示出</script>。而分离< with /script>使第二个</script>无法被检测到,以至于它才会在代码末端添加了另一个</script>。
    所以,我大胆猜想,在整个算法中,并没有IF语句来判断注释中是否有。所以,必要的话,你可以在javascript注释中添加另一个<\/script>字符串,让整个算法认定其中有两个</script>。

    答:HerrSerker
    不要把脚本标签用一句话写出来,而是要用并置的字符串表述出来:

    <html>
    <script>
    var t='<scr'+'ipt><'+'/script>';
    </script>
    </html>
    

    结果清除代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
    
    <html>
    <head>
    
        <script>
    var t='<scr'+'ipt><'+'/script>';
        </script>
    
        <title></title>
    </head>
    
    <body>
    </body>
    </html>
    

    答:Chris G
    我觉得,采用如下方法创建一个脚本标签比较好:

    <script>
    
       script = document.createElement('script');
    
       script.type = 'text/javascript';
    
       script.src = 'http://myserver.com/file.js';
    
       document.getElementsByTagName('head')[0].appendChild(script);  
    
    </script>
    

    reply
    0
  • Cancelreply