鉴于使用ASP.NET,javascript,css等技术的大型遗留项目,我想知道是否将网页的DOCTYPE从HTML 4.0 Transitional更改为XHTML 1.0 Transitional(或其他方式)以任何方式都可能破坏网页的javascript功能。

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

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

有帮助吗?

解决方案

更改DOCTYPE是否会破坏任何javascript函数实际上取决于这些函数的设计防御程度:)

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

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

说到 HTML vs XHTML ,为了让浏览器将文档呈现为XHTML,您首先必须使用适当的“内容类型”来提供文档。标题(即application / xhtml + xml)。如果您只将doctype更改为XHTML,但仍然将文档作为“text / html”提供,我知道的大多数浏览器仍会将其解析(并呈现)为HTML文档

请注意,到目前为止,IE并不理解“真实”的XHTML内容,这就是为文档/ html(使用HTML4.01 doctype)提供文档的原因是推荐的方法(当然,除非IE不在支持的浏览器中)。

就“真实”中的DOM特性而言XHTML文档,我听说像 document.write “这样的东西”不起作用“并且应始终通过 getAttribute / setAttribute (而不是通过更简单的属性访问器)来执行访问节点属性。 IIRC, innerHTML 也存在一些问题。

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

其他提示

如果您正在使用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提供内容类型的text / html。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top