代码之家  ›  专栏  ›  技术社区  ›  KaptajnKold

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

  •  9
  • KaptajnKold  · 技术社区  · 15 年前

    这个话题在办公室变成了一场热烈的讨论,所以我有兴趣了解你的想法。

    我们正在开发一个只针对某些特定浏览器的Web应用程序。这些浏览器目前包括不同风格的Opera 9和Mozilla 1.7.12。在未来,我们可能还必须支持Opera 10和不同风格的WebKit。但我们不太可能去处理任何版本的IE。

    我们的Web应用程序在其doctype中声明HTML4.0严格。

    最近,我提出了一个在HTML中使用自定义属性的特定问题的解决方案。我提出了一个类似这样的建议:

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

    因为这不是有效的HTML4,所以它和我们的HTMLGuys不太一样,我们开始争论。

    我的问题是:如果有的话,使用自定义属性的风险是什么?我知道页面不会验证,但不是所有浏览器都会忽略它们不知道的属性吗?或 是否可以想象,某些浏览器将更改为“怪癖模式”,并将页面呈现为非严格的HTML4.0格式? ?

    更新:

    把提出的实际问题隐藏起来。

    6 回复  |  直到 10 年前
        1
  •  13
  •   BalusC    15 年前

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

    这个 w3 spec 如下所示:

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

    IE也将 以怪癖模式渲染,或者一些人可能认为的那样。它只能在无效/强制的doctypes上执行此操作,而不能在无效的属性上执行此操作。

    但是,请记住,一些JavaScript库/框架将“无形地”添加/使用DOM树中的自定义HTML属性,例如几个jquery插件。这样,您可能会面临属性冲突的风险,因为它“偶然”使用的属性与您为自己的目的使用的属性同名。可悲的是,这通常很糟糕,甚至根本没有记录在案。

        2
  •  10
  •   stuartd saeed    15 年前

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

        3
  •  9
  •   MikeEL    15 年前

    如果目标是保持有效的HTML4.0严格,那么为什么要放入自定义属性并不重要,而是破坏了目标。

    我认为您需要问的问题是,为什么您需要打破4.0的严格性来获得您想要的功能:您可以为自己使用自定义属性的任何内容,都可以在现有属性中使用:

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

    可以是:

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

    解析所有类信息需要一些额外的周期,但是只要你不在该类上放置任何CSS信息,它不会改变显示,不会将你置于怪癖模式,也不会让你在工作中陷入争斗。

        5
  •  1
  •   bobince    15 年前

    或者可以想象,有些浏览器会变为“怪癖模式”,并将页面呈现为非严格的HTML4.0?

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

    如果您不关心验证,可以做您喜欢做的事情,但是验证是一个有用的工具,它可以检测简单的错误,否则会让您在调试过程中四处奔波。考虑到有许多其他非常好的方法可以将数据传递给javascript,我宁愿使用其中的一种,而不是放弃验证。

    另外,当您添加任意属性时,您将有效地在全局命名空间中播放。不能保证将来的浏览器或标准版不会决定使用名称“translationkey”来提供一些新功能,这些新功能会使您的脚本出错。因此,如果必须添加属性,请为它们指定一个模糊且可能唯一的名称,或者只使用HTML5 data- 前缀已经存在。

        6
  •  0
  •   avpaderno    15 年前

    如果页面声明为HTML4严格,则不应添加该HTML指定中未使用的属性。与此不同的是,目前还不清楚浏览器的行为。
    正如已经报道的,添加额外属性的方法是将它们作为类添加,即使这有一些限制。