使用自定义HTML属性的具体风险是什么?

时间:2009-12-18 14:03:11

标签: html doctype

这个问题在办公室变成了激烈的讨论,所以我很想知道你的想法。

我们正在开发一款仅针对某些特定浏览器的网络应用。这些浏览器目前包括不同风格的Opera 9和Mozilla 1.7.12。在未来,我们可能还需要支持Opera 10和不同版本的WebKit。但我们不太可能不得不处理任何版本的IE。

我们的网络应用程序声明HTML 4.0严格的文档类型。

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

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

由于这不是有效的HTML 4,它与我们的HTML人员的关系并不顺利,我们陷入了争论。

我的问题是:使用自定义属性的风险是什么?我知道页面不会验证,但是并非所有浏览器都忽略了他们不知道的属性?或者是否可以想象某些浏览器会更改为“怪癖模式”并将页面呈现为严格HTML 4.0 以外的其他内容?

更新:

提出实际提出的问题。

6 个答案:

答案 0 :(得分:13)

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

w3 spec说明如下:

  
      
  • 如果用户代理遇到无法识别的属性,则为   应该忽略整个属性   规范(即属性和   它的价值)。
  •   

IE也会在怪异模式下渲染,或者有人会想到。它只会对无效/强制文档类型执行此操作,而不会对无效属性执行此操作。

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

答案 1 :(得分:10)

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

答案 2 :(得分:9)

如果它的目标是保持有效的html4.0严格,那么为什么要放入自定义属性并不重要,你就是打破目标。

我认为你需要问的问题是,为什么你需要打破4.0严格来获得你想要的功能:你可以使用自定义属性的任何东西,你可以在现有的属性中使用: / p>

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

可能是:

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

解析所有类信息将是一些额外的周期,但只要你不在该类上放置任何css信息,它就不会改变显示,不会让你处于怪癖模式,并且不会“让你在工作中打架。”

答案 3 :(得分:2)

答案 4 :(得分:1)

  

或者可以想象某些浏览器会更改为“怪癖模式”并将页面呈现为严格的HTML 4.0以外的其他内容?

不,错误的属性不会强制渲染模式更改。

如果你不关心验证做你喜欢的事情,但验证是一个有用的工具,用于检测简单的错误,否则你可能会追逐调试。鉴于有许多其他非常好的替代方法可以将数据传递给JavaScript,我更喜欢使用其中一种,而不是放弃验证。

另外,当您添加任意属性时,您实际上正在全局命名空间中播放。我们无法保证未来某些浏览器或标准版不会决定使用“translationkey”这个名称来实现一些新功能。因此,如果您必须添加属性,请为其指定一个模糊且可能唯一的名称,或者只使用HTML5 data-前缀。

答案 5 :(得分:0)

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