定制 JSF 组件:将"startElement"与"script"一起使用会产生注释



我正在呈现一个自定义JSF组件。在方法encodeBegin我想包含一些java脚本。

public void encodeBegin(FacesContext context) throws IOException {
   ResponseWriter writer = context.getResponseWriter();
   writer.startElement("script", this);
   writer.writeAttribute("type", "text/javascript", null);
   writer.writeText("var width=400",null);
   writer.endElement("script");
}

呈现组件时,脚本标签的内容会被注释掉。

<script type="text/javascript"><!--
var width=400;
//--></script>

有谁能解释一下为什么会出现这个评论,我怎么删掉它?

提前感谢!

这是特定于MyFaces实现的,而不是JSF规范。Mojarra的实现不会这样做。

这种将JavaScript主体放在HTML注释中的方法基本上是HTML史前时代的残余,当时浏览器不支持<script>元素。这些HTML注释基本上隐藏了JavaScript内容,以防止那些古老的HTML解析器将JavaScript代码解释和显示为纯文本

参见Mozilla Developer Network -为XHTML编写JavaScript:

这在HTML中是常见的做法,将脚本隐藏在不支持JS的浏览器中。在XML时代,注释就是它们的本意:注释。在处理文件之前,所有注释都将从文档中删除,因此将脚本包含在其中就像将午餐扔进食人鱼池一样。而且,注释掉你的脚本是没有意义的——在过去十年里编写的浏览器都不会在页面上显示你的代码。

注意最后一句话,这是真的,在过去的十年里,没有一个浏览器能做到这一点。MyFaces显然有点过于热心地假设人们现在还会使用这样一个史前浏览器。

ok

实践是将javascript代码标记为注释,因此自动工具不会试图将其解析为HTML(例如,检查页面是否符合HTML 4的工具)。

Javascript引擎将忽略HTML注释并处理代码(Javascript注释是/*//

出于同样的原因,这种方法的一种变体是将Javascript放在CDATA标记中。

相关内容

  • 没有找到相关文章

最新更新