题
这个主题变成了办公室的激烈讨论,因此我有兴趣了解您的想法。
我们正在使用仅针对某些特定浏览器的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属性还可以吗?
还要看一下: HTML标签上的非标准属性。好东西?坏事?你的意见?
还是可以想象,某些浏览器会更改为“怪异模式”并渲染页面,就好像是严格的HTML 4.0一样?
不,不良属性不会迫使渲染模式更改。
如果您不关心验证做自己喜欢的事情,但是验证是检测简单错误的有用工具,否则您可以在调试中追逐。鉴于还有许多其他完美的替代方案可以将数据传递给JavaScript,因此我更喜欢使用其中之一,而不是放弃验证。
另外,当您添加任意属性时,您将在全局名称空间中有效地播放。不能保证某些未来的浏览器或标准不会决定使用“ TranslationKey”的名称来用于一些新功能,这些新功能会将您的脚本转移到您的脚本中。因此,如果您必须添加属性,请给他们一个晦涩难懂且可能是唯一的名称,或者只使用HTML5 data-
前缀已经。
如果该页面被声明为HTML 4严格,则不应添加HTML指定中未使用的属性。不同的是,尚不清楚浏览器的行为。
如已经报道的那样,添加其他属性的一种方法是将它们添加为类,即使这有一些限制。