在客户端捕获解析错误可能是可能的,但它确实解决了错误的问题。
我知道这不是您所要求的,但除非您正在做一些真正特定于 XHTML 的事情,例如嵌入一些其他标记语言,否则您应该将您的页面作为 text/html 而不是 application/xhtml+xml。即使它是 XHTML。通过将其作为 text/html 提供,您将避免遇到的问题,并允许您的页面也可以在 IE 中工作。请注意,确定使用哪个解析器的是 MIME 类型而不是 doctype 声明——使用过渡 doctype 不会这样做。
也就是说,如果您真的确定您希望您的页面被解析为 XHTML,那么最好在服务器上处理这种错误。通过构建 DOM 生成页面,然后发送序列化结果。如果这不是一个选项,那么首先像现在一样生成页面,但不要将其传输给客户端。获取您生成的 XHTML,并使用验证 XHTML 解析器(或至少是通用 XML 解析器)在服务器端解析它。如果您遇到错误,请显示您想要的任何错误页面。否则,序列化解析的 DOM 并将其发送给客户端。
综上所述,使用application/xhtml+xml的基本规则是:
- 不。
- (对于高级用户)不要,除非您已经证明如果页面以 text/html 形式提供,您正在做的事情将无法正常工作。这适用于 XHTMl 文档的一小部分。
- 如果您必须将您的页面作为 application/xhtml+xml 提供,请使用某种保证有效性的方法生成它。
- 除非您真的知道自己在做什么,否则永远不要将 application/xhtml+xml 用于包含用户输入的页面。
请记住,XHTML 只是 HTML 4 的重新表述加上嵌入其他语言的能力。如果您不使用嵌入,那么您所拥有的是具有不同但几乎完全兼容的语法的 HTML 4。绝大多数 XHTML 文档以 text/html 形式提供,因此被浏览器视为 HTML 4。