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

9nvpjoqh  于 2022-12-09  发布在  其他
关注(0)|答案(7)|浏览(118)

这个主题在办公室里引起了热烈的讨论,所以我很想知道你的想法。
我们正在开发一个只针对某些特定浏览器的Web应用程序。这些浏览器目前包括不同风格的Opera 9和Mozilla 1.7.12。将来我们可能还需要支持Opera 10和不同风格的WebKit。但我们不太可能需要处理任何版本的IE。
我们的Web应用程序在其doctype中严格声明HTML 4.0。
最近,我提出了一个解决方案,作为一个特定问题的使用自定义属性的HTML。我提出的东西看起来像这样:

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

由于这不是有效的HTML4,我们的HTML开发人员对它不太满意,因此我们陷入了争论。
我的问题是:使用自定义属性的风险是什么?我知道页面不会验证,但不是所有的浏览器都忽略了它们不知道的属性吗?或者可以想象一些浏览器会改为“怪癖模式”,并呈现页面,就像它不是严格的HTML 4.0一样
更新:
他回避了提出的实际问题。

sqougxex

sqougxex1#

There are no browser limitations/risks. Only the w3 validator will bark, but barking dogs doesn't bite.
The w3 spec says the following:

  • If a user agent encounters an attribute it does not recognize, it should ignore the entire attribute specification (i.e., the attribute and its value).

IE will also not render in quirks mode or so as some may think. It will only do that on invalid/forced doctypes, not on invalid attributes.
However, keep in mind that some Javascript libraries/frameworks will "invisibly" add/use custom HTML attributes in the DOM tree, such as several jQuery plugins do. This way you may risk collisions in attributes because it "by a coincidence" uses an attribute with the same name as you do for your own purposes. Sadly this is often poorly or even not documented at all.

pkln4tw6

pkln4tw62#

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

1hdlvixo

1hdlvixo3#

如果它的目标是严格保持有效的html4.0,那么你为什么要放入自定义属性并不重要,你正在打破这个目标。
我认为您需要问的问题是,为什么需要突破4.0的严格限制才能获得您想要的功能:任何可以使用自订属性的项目,都可以在现有属性中使用:

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

可以是:

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

解析所有的类信息需要一些额外的周期,但是只要你不把任何css信息放在那个类上,它就不会改变显示,不会让你陷入怪癖模式,也不会让你在工作中打架。

3duebb1j

3duebb1j5#

或者可以想象,一些浏览器将更改为“怪癖模式”,并呈现页面,好像它是严格的HTML 4.0以外的东西?
否,错误的属性不会强制渲染模式更改。
如果你不关心验证,那就做你喜欢做的事情,但是验证是一个有用的工具,可以检测简单的错误,否则你就可以到处调试。考虑到有很多其他完美的替代方法来向JavaScript传递数据,我宁愿使用其中之一,而不是放弃验证。
另外,当你添加一个任意的属性时,你实际上是在一个全局名称空间中玩游戏。不能保证未来的浏览器或标准不会决定使用“translationkey”这个名称来命名一些新特性,这会让你的脚本出错。所以如果你必须添加属性,给予它们一个模糊的、可能是唯一的名称,或者直接使用HTML5 data-前缀。

jogvjijk

jogvjijk6#

如果页面被声明为HTML4 strict,那么它不应该添加在HTML中没有使用的属性。不同的是,浏览器的行为并不清楚。
如前所述,添加附加属性的一种方法是将它们作为类添加,即使这有一些限制。

14ifxucb

14ifxucb7#

Answers which say custom attributes won't validate are incorrect.

Custom attributes will validate.
Custom tags will validate too, as long as the custom tags are lowercase and hyphenated.

Try this in any validator. It will validate.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Custom Test</title>
    </head>
    <body>
        <dog-cat PIANO="yellow">test</dog-cat>
    </body>
</html>

Some validators:
https://appdevtools.com/html-validator
https://www.freeformatter.com/html-validator.html
https://validator.w3.org/nu/

But is it safe? Will it break later?

Custom Tags

No hyphenated tags exist . For that reason, I believe that W3C will never add a hyphenated tag. It's very likely a custom hyphenated tag will never see a conflict. If you use a weird prefix in your custom tags, even less likely. Eg. <johny-Calendar> .

Custom Attributes

There are hyphenated HTML attributes. But the HTML spec promises never to use an attribute starting with data- . So data-myattrib is guaranteed to be safe.
I believe that W3C will never introduce any attribute that starts with johny- or piano- . As long as your prefix is weird, you'll never see a conflict.
It's worth considering that the first version of HTML was written in 1993. Now, thirty years later, all browsers still support custom tags and attributes, and validators validate them.

<jw-post jw-author="Johny Why" jw-date="12/2/2022">

相关问题