HTMLの属性値には長すぎますか?
私は新しいアプリケーションでHTML5スタイルのデータ属性(data-foo="bar"
)を使用していますが、1か所では、かなりの量のデータ(100文字以上)を保存するのが非常に便利です。この量は問題ないと思いますが、多すぎるという疑問が生じますか?
HTML 4の観点から見ると、属性はSGML構造です。それらの制限は HTML 4のSGML宣言 で定義されています:
QUANTITY SGMLREF ATTCNT 60-増加- ATTSPLEN 65536-これらは最大値です- LITLEN 65536-宣言で許可- NAMELEN 65536-実際の固定制限を避ける- PILEN 65536-HTML UAの実装- TAGLVL 100 TAGLEN 65536 GRPGTCNT 150 GRPCNT 64
ここで問題の値は「ATTSPLEN」です。これは、要素の属性仕様リストの制限になります(その要素のすべての属性の合計サイズである必要があります)。ただし、上記の注意では、固定された制限を回避する必要があることに言及しているため、ほとんどの実装で使用可能なメモリ以外に実際の制限はない可能性があります。
仕様 が言うように、HTML 5は異なるようです。「HTMLのこのバージョンは非SGMLベースに戻ります。」
後で、HTML 5の解析方法を説明するときに、次の文章が表示されます(emphasis added):
以下で説明するアルゴリズムは、生成されるDOMツリーの深さに制限なしを配置します。または長さタグ名、属性名、属性値 、テキストノードなど。実装者はarbitrary意的な制限を回避することが推奨されますが、実用的な懸念によりユーザーエージェントはネストの深さの制約を強いられる可能性が高いことが認識されています。
それがあなたの答えだと思います。
私はちょうど テストを書いた 属性に長さ1000万の文字列を入れてからそれを再び取得し、正常に動作します(Firefox 3.5.2およびInternet Explorer 7)
5000万を超えると、「このスクリプトの完了に時間がかかります」というメッセージが表示され、ブラウザーがハングします。
私は本当に制限があるとは思わない。私は今あなたができることを知っています
<a onclick=" //...insert 100KB of javascript code here">
そしてそれは正常に動作します。少し判読できませんが。
9.1.2.3属性
要素の属性は、要素の開始タグ内で表現されます。
属性には名前と値があります。属性名は、スペース文字、U + 0000 NULL、U + 0022 QUOTATION MARK( ")、U + 0027 APOSTROPHE( ')、U + 003E GREATER-THAN SIGN(>)、U +以外の1つ以上の文字で構成する必要があります002F SOLIDUS(/)、およびU + 003D EQUALS SIGN(=)文字、制御文字、およびUnicodeで定義されていない文字HTML構文では、属性名は小文字と大文字を組み合わせて記述できます。これは、属性名の大文字小文字を区別しないASCII一致です。
属性値は、テキストと文字参照の混合です。ただし、テキストにあいまいなアンパサンドを含めることはできないという追加の制限があります。
属性は、4つの異なる方法で指定できます。
空の属性構文
引用符で囲まれていない属性値の構文
単一引用符で囲まれた属性値の構文
二重引用符で囲まれた属性値の構文
ここでは、属性値のサイズの制限について言及していません。だから私は何もないはずだと思う。
ドキュメントをドキュメントに対して検証することもできます
属性の長さの制限について聞いたことがありません。
HTML 4.01仕様では、 属性のセクション でこれに関する制限について言及するものはありません。
HTML 4.01 DTD でも同じです。実際、私の知る限り、DTDでは属性の長さを指定できません。
HTML 4でそれについて何もなければ、HTML 5でそのようなものが現れるとは思いません-実際には 9.1.2.3 Attributes セクションに長さの制限はありませんHTML 5。
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、greator、deleterを備えたインターフェースです。セッターには、DOMString型の2つのパラメーター、名前と値があります。値はJavaScript文字列に直接マップされるDOMString型です。
http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:
から
JavaScript文字列の最大長は実装固有です。
[注:chromeは、bytes.comをマルウェアのソースとして報告しているため、注意してください]
SGMLは、65K文字の制限セットを持つ属性を定義します。次のとおりです。 http://www.highdots.com/forums/html/length-html-attribute-175546.html
あなたがやっていることのために、あなたは大丈夫であるはずです。上限については、jQueryがデータ属性を使用し、個人的にも数kのデータを保持しているのを見てきました。