对于HTML中的属性值来说,多长时间算太长?
我在一个新的应用程序中使用HTML5风格的数据属性(data-foo="bar"),在一个地方,它将非常方便地存储大量数据(超过100个字符)。虽然我怀疑这个数量是可以的,但它提出了一个问题:多少才算太多?
data-foo="bar"
我真的不认为有什么限制。我现在知道你能做到
<a onclick=" //...insert 100KB of javascript code here">
它工作得很好。虽然有点难以读懂。
我从未听说过对属性的长度有任何限制。
在HTML 4.01规范中,在属性部分中没有提到任何限制。
在HTML 4.01 DTD中也是如此——事实上,据我所知,DTD不允许你指定属性的长度。
如果在HTML 4中没有这方面的内容,我不认为HTML 5会出现类似的内容——而且我实际上也没有看到HTML 5的9.1.2.3属性部分有任何长度限制。
从HTML5语法文档
9.1.2.3属性 元素的属性为 在元素的start中表示 标签。< / p > 属性有一个名称和一个值。 属性名必须由一个或 空格以外的字符更多 字符,U+0000 NULL, U+0022 引号("),u +0027撇号 ('), u + 003e大于号(>), U+002F SOLIDUS(/),和U+003D = 符号(=)字符,控件 字符,以及任何字符 不是由Unicode定义的。在 HTML语法,属性名可能 用低级和任意组合写成的 大写字母是ASCII码 属性的不区分大小写匹配 属性的名字。< / p > 属性值是文本的混合物 还有角色参考,除了 附加的限制 文本不能包含模棱两可的内容 & . < / p > 属性可以在4中指定 不同的方式:< / p > 空属性语法 不带引号的属性值语法 单引号属性值语法 双引号属性值语法
9.1.2.3属性
元素的属性为 在元素的start中表示 标签。< / p > 属性有一个名称和一个值。 属性名必须由一个或 空格以外的字符更多 字符,U+0000 NULL, U+0022 引号("),u +0027撇号 ('), u + 003e大于号(>), U+002F SOLIDUS(/),和U+003D = 符号(=)字符,控件 字符,以及任何字符 不是由Unicode定义的。在 HTML语法,属性名可能 用低级和任意组合写成的 大写字母是ASCII码 属性的不区分大小写匹配 属性的名字。< / p >
属性值是文本的混合物 还有角色参考,除了 附加的限制 文本不能包含模棱两可的内容 & . < / p >
属性可以在4中指定 不同的方式:< / p >
空属性语法
不带引号的属性值语法
单引号属性值语法
双引号属性值语法
这里没有提到属性值的大小限制。所以我认为不应该有。
方法验证文档的有效性
< a href = " http://html5.validator。nu/" rel="nofollow noreferrer">HTML5验证器(高度实验性) .
我只是编写测试(注意!见下面的更新),它将长度为1000万年的字符串放入属性中,然后再次检索它,并且工作正常(Firefox 3.5.2 &Internet Explorer 7)
5000万会让浏览器挂在“这个脚本需要很长时间才能完成”的标签上;消息。
更新:我已经修复了脚本:它以前设置innerHTML为一个长字符串,现在它正在设置一个数据属性。它为我工作的长度为1亿。YMMV。
el.setAttribute('data-test', <<a really long string>>)
HTML5对属性值的长度没有限制。
正如规范所说,“此版本的HTML因此返回到非sgml基础上。”
稍后,当描述如何解析HTML5时,出现以下段落(强调添加):
下面描述的算法 在DOM树的深度上没有限制 或关于的长度标记 名称,属性名称,属性 值,文本节点等。而 实现者被鼓励避免 这是公认的任意限制 这种实际的担忧很可能 强制用户代理强制嵌套 深度约束。< / p >
因此,(理论上)HTML5属性的长度/大小没有限制.;
查看修订历史的原始答案涵盖HTML4。
从http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data:
每个HTML元素都可以指定任意数量的自定义数据属性和任意值。
从http://dev.w3.org/html5/spec/Overview.html#domstringmap:
注意:这里的DOMStringMap接口定义仅用于JavaScript 环境。其他语言绑定需要定义DOMStringMap的方式 为这些语言实现
从https://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:
JavaScript字符串的最大长度是特定于实现的。
最近在Edge(版本81.0.416.58(64位))中进行了测试,数据属性似乎有64k的限制。