XHTML Javascript代码在一行上

XHTML Javascript code on one line

本文关键字:一行 Javascript 代码 XHTML      更新时间:2023-09-26

在HTML5中,我可以在一行中使用特殊的javascript字符,如下所示:

<script> var x;If (x < 1){alert('</'+'script'+'>');} </script>
但是,

我正在尝试使我的代码适应移动设备,所以我认为尝试遵守移动配置文件 1.2 很好,但是,我在上述代码中遇到各种解析错误,例如:

character "<" is the first character of a delimiter but occurred as data

StartTag: invalid element name

这两个错误都会突出显示"<"字符。

这里的一篇文章表明我可以使用CDATA标签,其他地方表明html注释标签可能有效,但问题是这两种方法都需要javascript在自己的行上。例如:

<script type="text/javascript"><!--
var x;If (x < 1){alert('</'+'script'+'>');}    
// -->
</script>
<script type="text/javascript">
// <![CDATA[
var x;If (x < 1){alert('</'+'script'+'>');}    
// ]]>
</script>

有没有办法我可以在一行内获取这种 javascript 代码,并且它仍然可以正确执行而不会在 w3c 验证器中收到解析错误?

您应该使用小写的 if,并且还应该使用转义字符代码:

var x;if (x < 1){alert(''x3C/script>');} 

我不认为这是绝对必要的,但您也可以对脚本标签的另一端使用转义字符:

var x;if (x < 1){alert(''x3C/script'x3E');} 

if 应为小写。

var x;if (x < 1){alert('</'+'script'+'>');} 

根据您的情况,有几种解决方案。

  1. 如果这是真正的XHTML,即使用XML文件类型(例如,具有.xhtml扩展名的文档),则根本不需要<![CDATA[分隔符的注释。哦,你不需要把'</script>'切成碎片。

    <script type="text/javascript"> <![CDATA[ var x;if (x < 1){alert('</script>');} ]]> </script>
    
  2. (也使用真正的 XHTML),作为替代方案,您可以简单地将每个<替换为 &lt;,将每个&替换为&amp;,然后甚至不需要<![CDATA[

    <script type="text/javascript"> var x;if (x &lt; 1){alert('&lt;/script>');} ]]> </script>
    
  3. 但是,如果您不确定结果是否是真正的XHTML,则必须使用注释作为<![CDATA[分隔符,是的。还有切割'</script>'.
    但是,您不需要//注释。 /*..*/会做的很好!

    <script type="text/javascript"> /*<![CDATA[*/ var x;if (x < 1){alert('</'+'script'+'>');} /*]]>*/ </script>
    

顺便说一句,我会在</之间切入,但这只是我。