2009-09-10 53 views
5

鉴于使用ASP.NET,JavaScript,CSS等技术的大型遗留项目,我想知道是否将网页的DOCTYPE从HTML 4.0 Transitional改为XHTML 1.0 Transitional(或其他方式)任何方式都可能会破坏网页的JavaScript功能。DOCTYPE的选择是否会影响JavaScript代码所见的DOM?

有很多文章和讨论关于不同的DOCTYPES如何影响(css)页面渲染,但我似乎无法找到任何类似的主题打破任何代码。

我在寻找关于一般应注意事项的文章的链接,以便更好地发现现有代码中的潜在问题,并避免在编写新代码时出现问题。

回答

5

改变DOCTYPE是否会打破任何JavaScript函数实际上取决于如何防守这些功能的设计:)

例如,当文档中怪癖模式document.body(体)呈现成为所谓的“根元件”;当以标准模式呈现时,该根元素通常是document.documentElement(HTML)。这是一个相当实质的区别。如果确定浏览器屏幕大小的脚本始终查询的clientWidth/clientHeight属性,它显然会在怪癖模式下报告不正确的结果(因为IIRC,document.documentElement.clientWidth/clientHeight将表示HTML元素的维度,而不是屏幕的维度)。

大多数JS库通常明确指出是否支持quirksmode(我们 - Prototype.js - 例如,不支持quirks模式)。

说到HTML与XHTML,为了使浏览器能够将文档呈现为XHTML,您必须首先使用适当的“Content-type”标头(即application/xhtml + xml)来提供它。如果您仅将doctype更改为XHTML版本,但仍然将文档作为“text/html”提供,我知道大多数浏览器仍将解析(并呈现)为HTML文档

请注意,迄今为止,IE并不了解“真正的”XHTML内容,这就是为什么要将文档作为文本/ html(使用HTML4.01文档类型)提供推荐的方式(除非IE不支持浏览器, 当然)。

至于在“真正的” XHTML文档DOM特点,我听说像document.write有些事情“不工作”,而访问节点属性应该总是通过getAttribute/setAttribute进行(而不是通过简单的属性访问器) 。 IIRC,还有一些与innerHTML有关的问题。

在“真实的”XHTML文档中缺乏有关DOM的信息可能是由于其在一般网络的文档/应用程序中不实用(即IE缺乏对它的支持)。

+0

在某些文档模式中,dom元素不会从Object.prototype继承,并且因为它们不能用自定义方法或属性扩展...... – inf3rno 2013-07-01 05:16:12

1

如果您正在使用DTD:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

那么你的网站是在IE怪癖模式,在现代浏览器几乎标准模式,因为XHTML 1.0过渡DTD强制页面在标准模式下,会出现布局问题和Javascript中的潜在问题(特别是在IE中),因为在DOM与标准之间呈现的方式存在一些显着差异。

但是,如果HTML 4.01 DTD包含系统标识符:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

它应该已经在标准模式。您可以通过在您的站点中查询'document.compatMode'进行验证,如果它处于标准模式中,它将会显示'CSS1Compat',否则将显示'BackCompat'。

我假设你将要为XHTML 1.0 Transitional提供Content-Type的文本/ html。

+0

我验证了部分/完整文档类型问题。我对部分/完整的xhtml 1.0 doctype做了类似的测试,它看起来都是 <!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Transitional // EN”“http://www.w3。组织/ TR/XHTML1/DTD/XHTML1-transitional.dtd“> 和 <!DOCTYPE HTML PUBLIC! ” - // W3C // DTD XHTML 1.0过渡// EN“> 导致浏览器渲染页面在标准符合模式下,即部分的xhtml doctype不会像HTML 4.01那样强制页面进入怪异模式。奇怪。 – 2009-09-10 09:09:28

相关问题