2009-12-18 20 views
9

Questo argomento è diventato una discussione animata in ufficio, quindi sono interessato a sapere cosa ne pensi.Quali sono i rischi concreti dell'uso di attributi HTML personalizzati?

Stiamo lavorando a un'app Web destinata solo a determinati browser. Questi browser includono attualmente diversi tipi di Opera 9 e Mozilla 1.7.12. In futuro dovremmo anche supportare Opera 10 e diversi tipi di WebKit. Ma è molto improbabile che dovremo mai avere a che fare con qualsiasi versione di IE.

La nostra app web dichiara HTML 4.0 strict nel suo doctype.

Recentemente, ho proposto come soluzione a un problema specifico l'utilizzo di attributi personalizzati nell'HTML. Ho proposto qualcosa che sarebbe simile a questa:

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

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

La mia domanda è questa: quali sono i rischi dell'utilizzo di attributi personalizzati? So che la pagina non verrà convalidata, ma non tutti i browser ignorano solo gli attributi che non conoscono? O è concepibile che alcuni browser cambino in "quirks mode" e rendano la pagina come se fosse qualcosa di diverso dal rigoroso HTML 4.0?

Aggiornamento:

Hilited la questione reale posta.

risposta

13

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

Il w3 spec dice il seguente:

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

IE sarà anche non rendere in quirks mode o così come alcuni possono pensare. Lo farà solo su doctypes non validi/forzati, non su attributi non validi.

Tuttavia, tenere presente che alcune librerie/framework Javascript "aggiungono" in modo invisibile/utilizzano attributi HTML personalizzati nell'albero DOM, come fanno diversi plugin jQuery. In questo modo potresti rischiare collisioni negli attributi perché "per una coincidenza" utilizza un attributo con lo stesso nome che fai per i tuoi scopi. Purtroppo questo è spesso scarsamente o addirittura non documentato affatto.

+0

Ho accettato questa risposta perché affronta la domanda che ho posto. Una specie di fonte autorevole sarebbe comunque carina. – KaptajnKold

+0

Ho aggiunto una citazione da w3. – BalusC

+0

+1 grazie per la fonte w3 e preventivo specifico :) –

9

Se il suo l'obiettivo di mantenere valido html4.0 strict, quindi non importa perché vuoi inserire attributi personalizzati, stai rompendo l'obiettivo.

Penso che la domanda che devi porre sia la necessità di interrompere 4.0 strict per ottenere la funzionalità desiderata: qualsiasi cosa tu possa utilizzare un attributo personalizzato per te, potresti utilizzare un attributo in un attributo esistente:

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

potrebbe essere:

<span class="[email protected]">...</span> 

sarà alcuni cicli in più per analizzare tutte le informazioni di classe, ma finché non metti qualsiasi info css in quella classe, non è così cambia visualizzazione, non ti mette in modalità stranezza e non ti mette in combutta al lavoro.

+1

La mia opinione è che non dovrebbe essere un obiettivo in sé seguire lo standard. Utilizziamo html4.0 strict perché vogliamo garantire un comportamento browser specifik. Quindi la mia domanda è davvero: devo compromettere questo obiettivo utilizzando gli attributi personalizzati? – KaptajnKold

+0

great answer, MEL – Hardryv

+1

Per rispondere alla tua domanda: l'attributo Custom rende molto comodo cercare gli elementi nel DOM in MooTools: foo.getElements ("[myAttr]") trova tutti i nodi figli di foo con l'attributo myAttr. L'utilizzo della soluzione proposta sarebbe molto più complesso e potenzialmente più lento. – KaptajnKold

0

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

1

Oppure è concepibile che alcuni browser passino in "modalità quirks" e rendano la pagina come se fosse qualcosa di diverso dal rigoroso HTML 4.0?

No, gli attributi non validi non importeranno una modifica della modalità di rendering.

Se non ti interessa la convalida esegui ciò che ti piace, ma la convalida è uno strumento utile per rilevare semplici errori che altrimenti potrebbero inseguire il debugging. Dato che ci sono molte altre alternative perfette per trasmettere dati a JavaScript, preferisco usare una di queste, piuttosto che rinunciare alla validazione.

Inoltre, quando si aggiunge un attributo arbitrario, si sta effettivamente giocando in uno spazio dei nomi globale. Non c'è alcuna garanzia che alcuni browser o standard futuri non decideranno di utilizzare il nome "translationkey" per alcune nuove funzionalità che faranno scattare il tuo script. Pertanto, se è necessario aggiungere attributi, assegnare loro un nome oscuro e probabilmente univoco, oppure utilizzare semplicemente il prefisso HTML5 data-.

Problemi correlati