Gibt es eine Begrenzung für die Länge von HTML-Attributen?


213

Wie lang ist ein Attributwert in HTML zu lang?

Ich verwende Datenattribute ( data-foo="bar") im HTML5-Stil in einer neuen Anwendung, und an einer Stelle wäre es sehr praktisch, eine ganze Menge Daten (über 100 Zeichen) zu speichern. Ich vermute zwar, dass dieser Betrag in Ordnung ist, wirft aber die Frage auf, wie viel zu viel ist.


1
Ein weiteres Attribut, das voraussichtlich sehr langwierig sein wird, ist iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2, das ein ganzes Dokument enthält ( Ich habe gehört, Sie mochten Dokumente so (…) )
FelipeAls

Antworten:


265

HTML 4

Aus HTML 4-Sicht sind Attribute ein SGML-Konstrukt. Ihre Grenzen sind in der SGML-Deklaration von HTML 4 definiert :

         MENGE SGMLREF
                  ATTCNT 60 - erhöht -
                  ATTSPLEN 65536 - Dies sind die größten Werte -
                  LITLEN 65536 - in der Erklärung zulässig -
                  NAMELEN 65536 - Vermeiden Sie tatsächliche Grenzwerte -
                  PILEN 65536 - Implementierungen von HTML-UAs -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

Der hier fragliche Wert ist "ATTSPLEN", was die Grenze für die Attributspezifikationsliste eines Elements darstellt (dies sollte die Gesamtgröße aller Attribute für dieses Element sein). In der obigen Anmerkung wird jedoch erwähnt, dass feste Grenzwerte vermieden werden sollten, sodass es in den meisten Implementierungen wahrscheinlich keinen anderen realen Grenzwert als den verfügbaren Speicher gibt.

HTML 5

HTML 5 scheint anders zu sein, wie in der Spezifikation angegeben : "Diese Version von HTML kehrt somit zu einer Nicht-SGML-Basis zurück."

Später, wenn beschrieben wird, wie HTML 5 analysiert wird, erscheint die folgende Passage ( Hervorhebung hinzugefügt):

Der unten beschriebene Algorithmus begrenzt weder die Tiefe des generierten DOM-Baums noch die Länge von Tag-Namen, Attributnamen, Attributwerten , Textknoten usw. Obwohl Implementierer aufgefordert werden, willkürliche Grenzen zu vermeiden, wird anerkannt, dass praktische Bedenken bestehen wird Benutzeragenten wahrscheinlich dazu zwingen, Einschränkungen für die Verschachtelungstiefe aufzuerlegen.

Ich nehme an, das ist deine Antwort.


25
Die Antwort sollte also "unbegrenzt" sein?
Anders Lindén

1
Danke dir! Obwohl ich nicht upvoten kann - diese Antwort wäre wunderbar, wenn sie so etwas wie "HTML-Attribute haben theoretisch keine Größenbeschränkung" vorangestellt wäre. Das ist viel Lesen, nur um eine so einfache Antwort zu erhalten.
Rinogo

144

Ich habe gerade einen Test geschrieben, bei dem eine Zeichenfolge mit einer Länge von 10 Millionen in ein Attribut eingefügt und dann erneut abgerufen wird. Es funktioniert einwandfrei (Firefox 3.5.2 und Internet Explorer 7).

Bei 50 Millionen hängt der Browser mit der Meldung "Die Fertigstellung dieses Skripts dauert lange".


4
10 Millionen sind so eine riesige Datenmenge.
Rahul

3
Ich habe dieses Skript gerade bearbeitet, um die Größe auf 50 Millionen festzulegen, und es hat funktioniert, aber das Festlegen auf 100 Millionen hat den Tab in Chrome zerstört, bevor ich überhaupt die Möglichkeit hatte, ihn zu testen. : P
cHao

4
@nickf: Es ist praktisch begrenzt (zB durch Speicher), aber theoretisch unbegrenzt;)
Tim Schmelter

aus dem Gedächtnis abgestürzt
Holmium

Vielen Dank, dass Sie direkt zur Ware gekommen sind. Wenn ich die SGML-Spezifikation lesen wollte, würde ich die SGML-Spezifikation nachschlagen!
Rinogo

5

Ich glaube wirklich nicht, dass es Grenzen gibt. Ich weiß jetzt, dass du es kannst

<a onclick=" //...insert 100KB of javascript code here">

und es funktioniert gut. Wenn auch etwas unlesbar.


25
Ein wenig. -----
Paul Draper

4

Aus dem HTML5-Syntaxdokument

9.1.2.3 Attribute

Attribute für ein Element werden im Start-Tag des Elements ausgedrückt.

Attribute haben einen Namen und einen Wert. Attributnamen müssen aus einem oder mehreren anderen Zeichen als den Leerzeichen bestehen: U + 0000 NULL, U + 0022 QUOTATION MARK ("), U + 0027 APOSTROPHE ('), U + 003E GRÖSSER ALS ZEICHEN (>), U + 002F SOLIDUS (/) und U + 003D EQUALS SIGN (=) Zeichen, die Steuerzeichen und alle Zeichen, die nicht durch Unicode definiert sind. In der HTML-Syntax können Attributnamen mit einer beliebigen Mischung aus Klein- und Großbuchstaben geschrieben werden Dies ist eine Übereinstimmung zwischen ASCII-Groß- und Kleinschreibung für den Namen des Attributs.

Attributwerte sind eine Mischung aus Text- und Zeichenreferenzen, mit der zusätzlichen Einschränkung, dass der Text kein mehrdeutiges kaufmännisches Und enthalten darf.

Attribute können auf vier verschiedene Arten angegeben werden:

  1. Leere Attributsyntax

  2. Syntax für nicht zitierte Attributwerte

  3. Attributwertsyntax in einfachen Anführungszeichen

  4. Attributwertsyntax in doppelten Anführungszeichen

Hier wurde keine Begrenzung der Größe des Attributwerts erwähnt. Also ich denke es sollte keine geben.

Sie können Ihr Dokument auch anhand der überprüfen

HTML5-Validator (sehr experimentell)


1

Ich habe noch nie von einer Begrenzung der Länge von Attributen gehört.

In den HTML 4.01-Spezifikationen gibt es im Abschnitt über Attribute keine Einschränkung.

Gleiches gilt für die HTML 4.01-DTD. Soweit ich weiß, können Sie in der DTD keine Länge für Attribute angeben.

Wenn es in HTML 4 nichts darüber gibt, kann ich mir nicht vorstellen, dass so etwas für HTML 5 angezeigt wird - und ich sehe auch keine Längenbeschränkung im Abschnitt 9.1.2.3 Attribute für HTML 5.


1

Von http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data :

Für jedes HTML-Element können beliebig viele benutzerdefinierte Datenattribute mit einem beliebigen Wert angegeben werden.

Das, was zum Parsen / Verarbeiten dieser Daten- * Attributwerte verwendet wird, unterliegt Einschränkungen.

Es stellt sich heraus, dass die Datenattribute und Werte in einem DOMStringMap-Objekt platziert sind. Dies hat keine inhärenten Grenzen.

Von http://dev.w3.org/html5/spec/Overview.html#domstringmap :

Hinweis: Die hier definierte DOMStringMap-Schnittstellendefinition ist nur für JavaScript-Umgebungen vorgesehen. Andere Sprachbindungen müssen definieren, wie DOMStringMap für diese Sprachen implementiert werden soll

DOMStringMap ist eine Schnittstelle mit einem Getter, Setter, Greator und Deleter. Der Setter verfügt über zwei Parameter vom Typ DOMString, Name und Wert. Der Wert ist vom Typ DOMString, der direkt einem JavaScript-String zugeordnet ist.

Von http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:

Die maximale Länge eines JavaScript-Strings ist implementierungsspezifisch.

[Hinweis: Chrome meldet bytes.com als Quelle für Malware.



0

Kürzlich in Edge (Version 81.0.416.58 (64 Bit)) getestet, und Datenattribute scheinen ein Limit von 64 KB zu haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.