Quali sono i rischi concreti di utilizzare gli attributi HTML personalizzati?

StackOverflow https://stackoverflow.com/questions/1928369

  •  20-09-2019
  •  | 
  •  

Domanda

Questo argomento si è trasformato in una discussione accesa in ufficio, quindi sono interessato a imparare cosa ne pensi.

Stiamo lavorando su un'app Web che si rivolge solo ad alcuni browser specifici. Questi browser includono attualmente diversi sapori opera 9 e Mozilla 1.7.12. In futuro probabilmente dobbiamo anche supportare Opera 10 e diversi sapori di Webkit. Ma è molto improbabile che avremo mai a che fare con qualsiasi versione di IE.

La nostra app Web dichiara HTML 4.0 rigorosa nel suo docype.

Di recente, ho proposto come soluzione a un problema specifico per utilizzare gli attributi personalizzati nell'HTML. Ho proposto qualcosa che sarebbe così:

<span translationkey="someKey">...</span>

Dal momento che questo non è valido HTML 4, non è andato bene con i nostri ragazzi HTML e abbiamo avuto una discussione.

La mia domanda è questa: cosa - se ne sono - i rischi dell'uso di attributi personalizzati? So che la pagina non convaliderà, ma non tutti i browser ignorano gli attributi che non conoscono? O È ipotizzabile che alcuni browser cambieranno in "modalità stranezza" e rendono la pagina come se fosse qualcosa di diverso dal rigoroso HTML 4.0?

Aggiornare:

Evitato la domanda effettiva posta.

È stato utile?

Soluzione

Non ci sono limiti/rischi del browser. Solo il validatore W3 abbairà, ma i cani che abbaiano non mordono.

Il W3 Spec dice quanto segue:

  • Se un agente utente incontra un attributo che non riconosce, dovrebbe ignorare l'intera specifica dell'attributo (cioè l'attributo e il suo valore).

IE lo farà anche non Rendi in modalità Quirks o giù di lì come alcuni potrebbero pensare. Lo farà solo su doctipi non validi/forzati, non su attributi non validi.

Tuttavia, tieni presente che alcune librerie/framework JavaScript "invisibilmente" aggiungeranno/utilizzeranno gli attributi HTML personalizzati nell'albero DOM, come fanno diversi plug -in jQuery. In questo modo è possibile rischiare collisioni negli attributi perché "per una coincidenza" utilizza un attributo con lo stesso nome che fai per i tuoi scopi. Purtroppo questo è spesso male o addirittura documentato affatto.

Altri suggerimenti

HTML 5 consente gli attributi personalizzati utilizzando un prefisso 'data-', vedi http://ejohn.org/blog/html-5-data-attributes/

Se è un obiettivo per mantenere HTML4.0 valido rigoroso, allora non importa perché vuoi inserire attributi personalizzati, stai rompendo l'obiettivo.

Penso che la domanda che devi porre, sia perché devi rompere 4.0 rigoroso per ottenere la funzionalità che desideri: tutto ciò che potresti usare un attributo personalizzato per te, potresti usare un attributo esistente:

<span translationkey="someKey">...</span>

potrebbe essere:

<span class="Translationkey@someKey">...</span>

Sarà alcuni cicli extra per analizzare tutte le informazioni sulla classe, ma fintanto che non si inserisce alcuna informazione CSS su quella classe, non cambia il display, non ti mette in modalità Quirks e non ottiene Tu in combattimenti al lavoro.

O è ipotizzabile che alcuni browser cambieranno in "modalità stranezza" e rendono la pagina come se fosse qualcosa di diverso da HTML 4.0 rigoroso?

No, gli attributi cattivi non forzeranno una modifica della modalità di rendering.

Se non ti interessa la convalida, fai ciò che ti piace, ma la convalida è uno strumento utile per rilevare semplici errori che altrimenti possono farti inseguire il debug. Dato che ci sono molte altre alternative perfettamente buone per passare i dati a JavaScript, preferisco usarne uno di questi, piuttosto che rinunciare alla convalida.

Inoltre, quando aggiungi un attributo arbitrario, stai giocando effettivamente in uno spazio dei nomi globale. Non vi è alcuna garanzia che alcuni browser o standard futuri non deciderà di utilizzare il nome "TranslationKey" per una nuova funzionalità che farà scattare la sceneggiatura. Quindi, se devi aggiungere attributi, dai loro un nome oscuro e probabilmente unico o semplicemente usa HTML5 data- prefisso già.

Se la pagina viene dichiarata HTML 4 rigorosa, non dovrebbe aggiungere attributi che non vengono utilizzati in quanto HTML specifica. Diversamente, non è chiaro cosa si comporterebbero i browser.
Come già riportato, un modo per aggiungere ulteriori attributi è aggiungerli come classi, anche se questo ha alcune limitazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top