HTML の属性値が長すぎるのはどれくらいですか?
新しいアプリケーションでHTML5 スタイルのデータ属性 ( data-foo="bar"
) を使用していますが、1 つの場所に大量のデータ (100 文字以上) を格納すると非常に便利です。この量で十分だと思いますが、どのくらいが多すぎるのでしょうか?
HTML の属性値が長すぎるのはどれくらいですか?
新しいアプリケーションでHTML5 スタイルのデータ属性 ( data-foo="bar"
) を使用していますが、1 つの場所に大量のデータ (100 文字以上) を格納すると非常に便利です。この量で十分だと思いますが、どのくらいが多すぎるのでしょうか?
HTML 4 の観点から見ると、属性は SGML 構造です。それらの制限は、HTML 4 の SGML 宣言で定義されています。
数量 SGMLREF ATTCNT 60 -- 増加 -- ATTSPLEN 65536 -- これらは最大値です -- LITLEN 65536 -- 宣言で許可 -- NAMELEN 65536 -- 実際の固定制限を避ける -- PILEN 65536 -- HTML UA の実装 -- TAGLVL 100 タグレン 65536 GRPGTCNT 150 GRPCNT 64
ここで問題となっている値は「ATTSPLEN」です。これは、要素の属性仕様リスト (その要素のすべての属性の合計サイズである必要があります) の制限になります。ただし、上記の注記では、固定制限は避けるべきであると述べられているため、ほとんどの実装では、使用可能なメモリ以外に実際の制限はない可能性があります。
HTML 5 には、属性値の長さに制限がないように思われます。
仕様にあるように、「したがって、このバージョンの HTML は非 SGML ベースに戻ります」。
後で、HTML 5 を解析する方法を説明するときに、次の文章が表示されます (強調を追加)。
以下で説明するアルゴリズムは 、生成される DOM ツリーの深さ、またはタグ名、属性名、属性値、テキスト ノードなどの長さに制限を設けません。ユーザー エージェントにネストの深さの制約を強制する可能性があります。
したがって、(理論的には) HTML 5 属性の長さ/サイズに制限はありません。
長さ1000 万の文字列を属性に入れ、それを再度取得するテスト(注:以下の更新を参照) を作成しましたが、正常に動作します (Firefox 3.5.2 および Internet Explorer 7)。
5,000 万を超えると、「このスクリプトが完了するまでに時間がかかります」というメッセージが表示され、ブラウザがハングアップします。
更新: スクリプトを修正しました: 以前は innerHTML を長い文字列に設定していましたが、現在はデータ属性を設定しています。https://output.jsbin.com/wikulamuni長さ1億で動作します。YMMV。
el.setAttribute('data-test', <<a really long string>>)
本当に限界はないと思います。私は今あなたができることを知っています
<a onclick=" //...insert 100KB of javascript code here">
そしてそれはうまくいきます。少し読みにくいですが。
9.1.2.3 属性
要素の属性は、要素の開始タグ内で表現されます。
属性には名前と値があります。属性名は、スペース文字以外の 1 つ以上の文字で構成する必要があります。U+0000 NULL、U+0022 引用符 (")、U+0027 アポストロフィ (')、U+003E 大なり記号 (>)、U+ 002F SOLIDUS (/)、および U+003D EQUALS SIGN (=) 文字、制御文字、および Unicode で定義されていない任意の文字 HTML 構文では、属性名は小文字と大文字の任意の組み合わせで記述できます。これは、大文字と小文字を区別しない ASCII 属性の名前の一致です。
属性値は、テキストにあいまいなアンパサンドを含めることができないという追加の制限を除いて、テキスト参照と文字参照の混合です。
属性は、次の 4 つの方法で指定できます。
空の属性構文
引用符で囲まれていない属性値の構文
単一引用符で囲まれた属性値の構文
二重引用符で囲まれた属性値の構文
ここでは、属性値のサイズの制限について言及していません。だから無くてはいけないと思います。
に対してドキュメントを検証することもできます。
http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-dataから:
すべての HTML 要素には、任意の数のカスタム データ属性を任意の値で指定できます。
これらの data-* 属性値を解析/処理するために使用されるものには制限があります。
データ属性と値が DOMStringMap オブジェクトに配置されていることがわかります。これには固有の制限はありません。
http://dev.w3.org/html5/spec/Overview.html#domstringmapから:
注: ここでの DOMStringMap インターフェース定義は、JavaScript 環境のみを対象としています。他の言語バインディングでは、それらの言語で DOMStringMap を実装する方法を定義する必要があります
DOMStringMap は、getter、setter、greor、deleter を備えたインターフェースです。セッターには、タイプ DOMString の名前と値の 2 つのパラメーターがあります。値は、JavaScript 文字列に直接マップされる DOMString 型です。
からhttp://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:
JavaScript 文字列の最大長は実装固有です。
[注: Chrome は bytes.com をマルウェアのソースとして報告しているので、注意してください]
属性の長さに制限があるとは聞いたことがありません。
HTML 4.01 仕様では、属性に関するセクションに、これに関する制限について言及するものは何もありません。
HTML 4.01 DTDでも同じです。実際、私の知る限り、DTD では属性の長さを指定できません。
HTML 4 でそれについて何もない場合、HTML 5 でそのようなものが表示されるとは思いません。実際、HTML 5 の9.1.2.3 属性セクションにも長さの制限はありません。
SGML は、65k 文字の制限セットで属性を定義します。こちらを参照してください: http://www.highdots.com/forums/html/length-html-attribute-175546.html
あなたがしていることのために、あなたは大丈夫なはずです。上限については、jQuery の使用データ属性が個人的に数 k のデータを保持することも確認しました。