这个主题变成了办公室的激烈讨论,因此我有兴趣了解您的想法。

我们正在使用仅针对某些特定浏览器的Web应用程序。这些浏览器目前包括不同的口味Opera 9和Mozilla 1.7.12。将来,我们可能还必须支持Webkit的Opera 10和不同的口味。但是,我们不可能处理任何版本的IE。

我们的Web应用程序声明HTML 4.0严格的Doctype。

最近,我建议作为特定问题的解决方案,以使用HTML中的自定义属性。我提出了看起来像这样的东西:

<span translationkey="someKey">...</span>

由于这不是有效的HTML 4,因此与我们的HTML家伙相处得不顺利,我们陷入了争执。

我的问题是:使用自定义属性的风险是什么?我知道该页面不会验证,但是并非所有浏览器都忽略他们不知道的属性吗?或者 是否可以想象,有些浏览器会更改为“怪异模式”,并渲染页面,就好像是严格的HTML 4.0一样。?

更新:

提出了实际问题。

有帮助吗?

解决方案

没有浏览器限制/风险。只有W3验证器才会吠叫,但吠叫狗不会咬人。

W3规格 说以下内容:

  • 如果用户代理遇到属性未识别的属性,则应忽略整个属性规范(即属性及其值)。

即也会 不是 正如某些人可能想到的那样,以怪癖模式渲染。它只会在无效的医生/强制医生上做到这一点,而不是在无效的属性上做到这一点。

但是,请记住,某些JavaScript库/框架将“无形地”添加/使用DOM树中的自定义HTML属性,例如几个jQuery插件。这样,您可能会冒着属性碰撞的风险,因为它“通过一个巧合”使用了与您自己的目的相同名称的属性。可悲的是,这通常很差甚至根本没有记录。

其他提示

HTML 5允许使用“数据 - ”前缀自定义属性,请参阅 http://ejohn.org/blog/html-5-data-attributes/

如果它的目标是严格维护有效的HTML4.0,那么您要放置自定义属性的目标都无关紧要,您正在打破目标。

我认为您需要问的问题是,为什么您需要严格破坏4.0以获取所需的功能:任何可以使用自定义属性的功能,您可以在现有属性中使用A:

<span translationkey="someKey">...</span>

可能:

<span class="Translationkey@someKey">...</span>

解析所有类信息将是一些额外的周期,但是只要您不将任何CSS信息放在该课程上,它不会更改显示,也不会使您处于怪异模式,并且不会得到您在工作中打架。

还是可以想象,某些浏览器会更改为“怪异模式”并渲染页面,就好像是严格的HTML 4.0一样?

不,不良属性不会迫使渲染模式更改。

如果您不关心验证做自己喜欢的事情,但是验证是检测简单错误的有用工具,否则您可以在调试中追逐。鉴于还有许多其他完美的替代方案可以将数据传递给JavaScript,因此我更喜欢使用其中之一,而不是放弃验证。

另外,当您添加任意属性时,您将在全局名称空间中有效地播放。不能保证某些未来的浏览器或标准不会决定使用“ TranslationKey”的名称来用于一些新功能,这些新功能会将您的脚本转移到您的脚本中。因此,如果您必须添加属性,请给他们一个晦涩难懂且可能是唯一的名称,或者只使用HTML5 data- 前缀已经。

如果该页面被声明为HTML 4严格,则不应添加HTML指定中未使用的属性。不同的是,尚不清楚浏览器的行为。
如已经报道的那样,添加其他属性的一种方法是将它们添加为类,即使这有一些限制。

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