2014-06-09 64 views
5

我想解析HTML代码以提取其中的所有链接。为了避免无法联系我删除注释代码与<!--开始和-->。这里结束问题来了:在HTML代码中,我可能会发现一些JavaScript代码,例如:带评论的JavaScript代码的HTML

<html> 
<HEAD> 
<SCRIPT LANGUAGE="JavaScript"> 
<!-- Begin 
if (document.images) { 
    var pic2 = new Image(); // for the inactive image 
    pic2.src = "pic2.jpg"; 
    var title2 = new Image(); 
    title2.src = "title2.jpg"; 
    } 
... 
--> 

而奇怪的是, JS代码被评论,但它仍然有效。所以,如果我删除该代码,结果将不会如预期的那样。我应该怎么做才能确定何时遇到未使用的已评论代码以及何时该已评论代码正常工作?

回答

6

奇怪的是,该js代码的注释,但它仍然有效

这些都是不评论。脚本(和样式)元素的语法是否允许在注释语法之后,以便早于脚本和样式的浏览器不会将代码呈现为文本。

我应该怎么做才能确定何时遇到未使用的已评论代码以及何时该已评论的代码有效?

编写一个真正的HTML解析器,跟在parsing specification之后,然后从生成的DOM中删除任何注释节点。


作为一个肮脏的(但可能很快)解决方案,你可以忽略内部标记为在HTML 4.01 DTD含有CDATA元素的意见。

+0

好的。现在事情很清楚。非常感谢你的回答。我会寻找最好的策略。 –

0

奇怪的是,该js代码的注释,但它仍然有效

没有什么奇怪的了。评论<!-- -->只能在HTML中使用,而不能在JavaScript中使用。由于您已将这些注释放入<script>标签中,因此您的上述代码仍然可以使用。 唯一的区别是,如果用户在他/她的浏览器上禁用了JavaScript,他将不会在浏览器上看到打印的代码(因为在没有JavaScript的情况下HTML会解析这些注释)。

+1

这并没有回答这个问题(这是关于识别哪个'<! - '和' - >'是注释,哪些不是)。你也错了,支持JS但禁用它的浏览器(以及任何自1998年以来不支持JS的浏览器)将不会在脚本内呈现文本。它只是在HTML之前添加脚本的浏览器。 – Quentin

+0

Thanx为您的答案。 –

-1

您需要注释掉整个<脚本>块。例如

<!-- <script> 
     ...some javascript code... 
</script> --> 
+1

问题是询问如何识别''序列,它们是注释,哪些不是。它不是要求如何评论脚本。 – Quentin

+0

对不起,完全错过了那部分。 – pankaj