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