HTML özelliklerinin uzunluğunda bir sınır var mı?


213

HTML'deki özellik değeri için ne kadar uzun?

HTML5 stili veri özniteliklerini ( data-foo="bar") yeni bir uygulamada kullanıyorum ve tek bir yerde (100 karakterden fazla) adil bir veri deposu depolamak gerçekten kullanışlı olurdu. Bu miktarın iyi olduğundan şüphelenirken, ne kadar çok olduğu sorusunu gündeme getiriyor.


1
Bilgi için, çok uzun olması beklenen diğer bir özellik iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [ Tüm belgeyi içeren HTML5.2 ( Belgeleri beğendiğinizi duydum (…) )
FelipeAls

Yanıtlar:


265

HTML 4

HTML 4 perspektifinden, özellikler bir SGML yapısıdır. Sınırları HTML 4'ün SGML Beyanında tanımlanmıştır :

         MİKTAR SGMLREF
                  ATTCNT 60 - arttı -
                  ATTSPLEN 65536 - Bunlar en büyük değerlerdir -
                  LITLEN 65536 - bildiride izin verilir -
                  NAMELEN 65536 - Gerçekte sabit sınırlardan kaçının -
                  PILEN 65536 - HTML UA'ların uygulamaları -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

Burada söz konusu değer, bir öğenin özellik spesifikasyon listesindeki (o öğenin tüm özelliklerinin toplam boyutu olması gereken) sınır olacak olan "ATTSPLEN" tir. Yukarıdaki not sabit sınırlardan kaçınılması gerektiğinden bahsetmektedir, bu nedenle çoğu uygulamada kullanılabilir bellek dışında gerçek bir sınır bulunmadığı muhtemeldir.

HTML 5

Spesifikasyonun dediği gibi HTML 5 farklı gibi görünüyor , "HTML'nin bu sürümü SGML olmayan bir temele geri dönüyor."

Daha sonra, HTML 5'in nasıl ayrıştırılacağını açıklarken aşağıdaki pasaj görünür ( vurgu eklendi):

Yerlerde aşağıda açıklanan algoritma limitsiz DOM ağacının derinliğine üretilen veya uzunluğuna etiket isimlerinin, özellik adları, özellik değerlerinin uygulamacılarıdır keyfi sınırlar önlemek için teşvik edilirken, metin düğümlerinin, vb pratik kaygılar kabul edilmektedir büyük olasılıkla kullanıcı aracılarını yuvalama derinliği kısıtlamaları uygulamaya zorlar.

Sanırım cevabınız bu.


25
O zaman cevap "sınırsız" olmalıdır?
Anders Lindén

1
Teşekkür ederim! Ben upvote edemesem de - "HTML özniteliklerinin teorik olarak boyut sınırı yok" gibi bir şeyle önceden hazırlanmış olsaydı bu cevap harika olurdu. Bu kadar basit bir cevapla kurtulmak için çok fazla okuma.
rinogo

144

Sadece ettik bir test yazılı uzunlukta bir dize koyar 10 milyon bir öznitelik içine ve yeniden alır ve bu cezayı çalışır (Firefox 3.5.2 ve Internet Explorer 7)

50 milyon, tarayıcının "Bu komut dosyasının tamamlanması uzun zaman alıyor" iletisiyle askıda kalmasını sağlıyor.


4
10 milyon çok büyük miktarda veri.
rahul

3
Bu betiği boyutu 50 milyona ayarlamak için düzenledim ve işe yaradı, ancak 100 milyona ayarlamak, test etme şansım bile olmadan Chrome'daki sekmeyi öldürdü. : P
cHao

4
@nickf: Pratik olarak sınırlıdır (örn. hafıza ile) ancak teorik olarak sınırsızdır;)
Tim Schmelter

bellek yetersiz çöktü
holmiyum

Doğrudan mallara ulaştığınız için teşekkürler. SGML spesifikasyonunu okumak isteseydim, SGML spesifikasyonuna bakardım!
rinogo

6

Gerçekten bir sınır olduğunu düşünmüyorum. Şimdi yapabileceğini biliyorum

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

ve iyi çalışıyor. Biraz okunamaz da olsa.


27
Bir miktar. -----
Paul Draper

4

Gönderen HTML5 sözdizimi doc

9.1.2.3 Özellikler

Bir öğenin öznitelikleri, öğenin başlangıç ​​etiketinin içinde ifade edilir.

Özelliklerin bir adı ve değeri vardır. Özellik adları, boşluk karakterleri dışında bir veya daha fazla karakterden oluşmalıdır: U + 0000 NULL, U + 0022 TEKLİF İŞARETİ ("), U + 0027 APOSTROPHE ('), U + 003E BÜYÜK İŞARET (>), U + 002F SOLIDUS (/) ve U + 003D EQUALS SIGN (=) karakterleri, kontrol karakterleri ve Unicode tarafından tanımlanmayan karakterler HTML sözdiziminde, küçük ve büyük harflerin herhangi bir karışımıyla yazılabilir. özelliğin adı için ASCII büyük / küçük harfe duyarlı olmayan eşleşmelerdir.

Özellik değerleri, metnin belirsiz bir ve işareti içeremediği ek kısıtlama haricinde, metin ve karakter referanslarının bir karışımıdır.

Öznitelikler dört farklı şekilde belirtilebilir:

  1. Boş özellik sözdizimi

  2. Alıntılanmamış özellik değeri sözdizimi

  3. Tek tırnaklı özellik değeri sözdizimi

  4. Çift tırnaklı özellik değeri sözdizimi

Burada özellik değerinin boyutuyla ilgili bir sınırdan söz edilmemiştir. Bence hiçbiri olmamalı.

Ayrıca, belgenizi

HTML5 Doğrulayıcı (Son Derece Deneysel)


1

Özelliklerin uzunluğuyla ilgili herhangi bir sınır duymadım.

HTML 4.01 spesifikasyonlarında, Nitelikler bölümünde, bununla ilgili herhangi bir sınırlamadan bahseten hiçbir şey yoktur.

HTML 4.01 DTD ile aynı - aslında, bildiğim kadarıyla, DTD niteliklere bir uzunluk belirtmenize izin vermiyor.

HTML 4'te bununla ilgili bir şey yoksa, HTML 5 için böyle bir şey hayal edemiyorum - ve aslında HTML 5 için 9.1.2.3 Nitelikler bölümünde herhangi bir uzunluk sınırlaması görmüyorum .


1

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

Her HTML öğesinde, herhangi bir değerle belirtilen sayıda özel veri özelliği bulunabilir.

Bu data- * öznitelik değerlerini ayrıştırmak / işlemek için kullanılan sınırlamalar olacaktır.

Veri öznitelikleri ve değerlerin bir DOMStringMap nesnesine yerleştirildiği ortaya çıkıyor. Bunun doğal bir sınırı yoktur.

Gönderen http://dev.w3.org/html5/spec/Overview.html#domstringmap :

Not: Buradaki DOMStringMap arayüz tanımı sadece JavaScript ortamları için tasarlanmıştır. Diğer dil bağlarının DOMStringMap'in bu diller için nasıl uygulanacağını tanımlaması gerekir

DOMStringMap bir alıcı, ayarlayıcı, greator ve deleter içeren bir arayüzdür. Ayarlayıcının DOMString türünde iki parametre vardır: ad ve değer. Değer, doğrudan bir JavaScript Dizesi ile eşlenen DOMString türündedir.

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

Bir JavaScript Dizesinin maksimum uzunluğu uygulamaya özgüdür.

[not: chrome bytes.com'u kötü amaçlı yazılım kaynağı olarak bildiriyor, bu yüzden dikkatli olun]



0

Son zamanlarda Edge'de test edildi (Sürüm 81.0.416.58 (64 bit)) ve veri özniteliklerinin 64k sınırı var gibi görünüyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.