鉴于使用 ASP.NET、javascript、css 等技术的大型遗留项目,我想知道是否更改网页的 DOCTYPE,例如,从 HTML 4.0 Transitional 到 XHTML 1.0 Transitional(或相反)任何方式都可能破坏网页的 javascript 功能。
关于不同的 DOCTYPES 如何影响页面的 (css) 呈现,有很多文章和讨论,但我似乎找不到任何关于破坏任何代码的类似内容。
我正在查找有关一般注意事项的文章链接,以便更好地发现现有代码中的潜在问题并避免在编写新代码时产生问题。
最佳答案
更改 DOCTYPE 是否会破坏任何 javascript 函数实际上取决于这些函数的设计防御性:)
例如,当文档以quirks 模式 呈现时,document.body
(BODY) 成为所谓的“根元素”;当以标准模式呈现时,该根元素通常是 document.documentElement
(HTML)。这是一个相当实质性的区别。如果确定浏览器屏幕大小的脚本总是查询 document.documentElement
的 clientWidth
/clientHeight
属性,它显然会在 quirks 模式下报告不正确的结果(因为 IIRC,document.documentElement.clientWidth/clientHeight
将代表 HTML 元素的尺寸,而不是屏幕元素)。
大多数 JS 库通常明确声明是否支持 quirksmode(我们 - Prototype.js - 例如,不支持 quirks 模式)。
谈到 HTML 与 XHTML,为了让浏览器将文档呈现为 XHTML,您必须首先为其提供适当的“Content-type” header (即 application/xhtml+xml)。如果您只将 doctype 更改为 XHTML,但仍将文档作为“text/html”提供,我知道的大多数浏览器仍会将其解析(并呈现)为 HTML 文档。
请注意,到目前为止,IE 不理解“真正的”XHTML 内容,这就是为什么将文档作为 text/html(使用 HTML4.01 文档类型)提供服务是推荐的方式(除非 IE 不在受支持的浏览器中,当然)。
就“真正的”XHTML 文档中的 DOM 特性而言,我听说像 document.write
这样的东西“不起作用”并且访问节点属性应该始终通过 getAttribute/setAttribute
(而不是通过更简单的属性访问器)。 IIRC,innerHTML
也存在一些问题。
在“真正的”XHTML 文档中缺少有关 DOM 的信息可能是由于它在文档/通用 Web 应用程序中不切实际(即 IE 不支持它)。
关于javascript - DOCTYPE 的选择是否会影响 javascript 代码所见的 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1403887/