我可以使用Javascript检测XHTML解析错误吗?

我可以使用Javascript检测XHTML解析错误吗?,javascript,xhtml,error-logging,parsing-error,Javascript,Xhtml,Error Logging,Parsing Error,当我的XHTML页面出现标记错误时,Mozilla Firefox会显示“黄色死亡屏幕”,在黄色背景上只显示一条红色的错误消息 虽然这些错误很少见,但它们对用户极不友好 是否有一种方法可以使用Javascript检测这些,从而将消息发送回服务器 到目前为止,我发现: -放置在分析错误之前的脚本仍在运行。(当然可以。) -在这些脚本中设置的超时和间隔在解析错误后仍将执行。 -在Firefox中,DOM是一个,里面有一个。如果查询document.firstChild.tagName,我可以检测到这

当我的XHTML页面出现标记错误时,Mozilla Firefox会显示“黄色死亡屏幕”,在黄色背景上只显示一条红色的错误消息

虽然这些错误很少见,但它们对用户极不友好

是否有一种方法可以使用Javascript检测这些,从而将消息发送回服务器

到目前为止,我发现: -放置在分析错误之前的脚本仍在运行。(当然可以。) -在这些脚本中设置的超时和间隔在解析错误后仍将执行。 -在Firefox中,DOM是一个
,里面有一个
。如果查询
document.firstChild.tagName
,我可以检测到这一点

剩余问题: -我可以监听哪些事件来检测这种情况?(投票真糟糕。)
-如何在其他浏览器中检测到这一点?

我知道这可能不是最有用的答案,但您是否考虑过切换到过渡doctype


无论如何,把你的文件通过一个解析器来检测错误,但是离线进行——向用户显示YSOD的风险是不值得的

我知道这可能不是最有用的答案,但你考虑过换成过渡doctype吗


无论如何,把你的文件通过一个解析器来检测错误,但是离线进行——向用户显示YSOD的风险是不值得的

这并不能回答您的问题,但为什么不在生成XHTML之后/何时以及将其发送到浏览器之前在服务器上验证XHTML呢?

这并不能回答您的问题,但为什么不在服务器上验证XHTML呢,在生成之后/何时以及在将其发送到浏览器之前?

捕获客户端上的解析错误可能是可能的,但它确实解决了错误的问题

我知道这不是您所要求的,但是除非您正在做一些真正特定于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只是HTML4的一种重新格式,加上嵌入其他语言的能力。如果您不使用嵌入,您所拥有的是HTML4,它具有不同但几乎完全兼容的语法。绝大多数XHTML文档都是以文本/html形式提供的,因此浏览器将其视为HTML4。

    在客户端捕获解析错误可能是可能的,但它确实解决了错误的问题

    我知道这不是您所要求的,但是除非您正在做一些真正特定于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只是HTML4的一种重新格式,加上嵌入其他语言的能力。如果您不使用嵌入,您所拥有的是HTML4,它具有不同但几乎完全兼容的语法。绝大多数XHTML文档都是以文本/html形式提供的,因此浏览器将其视为html 4。

    我的第一个问题是:由于Internet Explorer不允许您实际指定应用程序
    (function() {
        if(document.documentElement &&
            document.documentElement.getAttribute('xmlns') !==
            'http://www.w3.org/1999/xhtml') {
            alert('parsing errors');
        }
        else if(document.body && document.body.lastChild) {
            alert('no parsing errors');
        }
        else setTimeout(arguments.callee, 100);
    })();