2009-12-18 26 views
9

Este tema se convirtió en una acalorada discusión en la oficina, así que estoy interesado en saber lo que piensas.¿Cuáles son los riesgos concretos de usar atributos HTML personalizados?

Estamos trabajando en una aplicación web que solo se dirige a algunos navegadores específicos. Estos navegadores actualmente incluyen diferentes sabores Opera 9 y Mozilla 1.7.12. En el futuro, es probable que también tengamos que admitir Opera 10 y diferentes sabores de WebKit. Pero es muy poco probable que alguna vez tengamos que lidiar con ninguna versión de IE.

Nuestra aplicación web declara HTML 4.0 estricto en su doctype.

Recientemente, propuse como solución a un problema específico el uso de atributos personalizados en el HTML. Propuse algo que podría tener este aspecto:

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

Como esto no es válida HTML 4, no fue abajo bien con nuestros chicos HTML, y que tuvo una discusión.

Mi pregunta es esta: ¿Cuáles son los riesgos de utilizar atributos personalizados? Sé que la página no se validará, pero ¿no todos los navegadores simplemente ignoran los atributos que no conocen? O ¿es concebible que algunos navegadores cambien al "modo peculiar" y visualicen la página como si fuera algo más que el estricto HTML 4.0?

Actualización:

Hilited la cuestión planteada real.

Respuesta

13

No hay limitaciones/riesgos del navegador. Solo el validador w3 ladrará, pero ladrar perros no muerde.

El w3 spec dice lo siguiente:

  • Si un agente de usuario se encuentra con un atributo que no reconoce, se debe ignorar toda la especificación de atributo (es decir, el atributo y su valor).

IE también no la presentación en modo peculiaridades más o menos como algunos pueden pensar. Solo lo hará en doctypes no válidos/forzados, no en atributos no válidos.

Sin embargo, tenga en cuenta que algunas bibliotecas/marcos de JavaScript agregarán/usarán de forma "invisible" atributos de HTML personalizados en el árbol DOM, como lo hacen varios complementos de jQuery. De esta forma, puede arriesgar colisiones en los atributos porque "por coincidencia" utiliza un atributo con el mismo nombre que usted para sus propios fines. Lamentablemente, esto a menudo es pobre o incluso no está documentado en absoluto.

+0

Acepté esta respuesta porque responde a la pregunta que planteé. Sin embargo, algún tipo de fuente autorizada sería agradable. – KaptajnKold

+0

He añadido una cita de w3. – BalusC

+0

+1 gracias por la fuente de w3 y presupuesto específico :) –

9

Si es una meta para mantener valid html4.0 strict, entonces no importa por qué quieres poner atributos personalizados, estás rompiendo el objetivo.

Creo que la pregunta que debe hacerse es: ¿por qué necesita romper 4.0 estrictas para obtener la funcionalidad que desea? Cualquier cosa que podría usar un atributo personalizado para usted, podría utilizar un atributo existente:

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

podrían ser:

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

que habrá algunos ciclos adicionales para analizar toda la información de clase, pero siempre y cuando usted no pone ninguna información css en esa clase, no lo hace cambia de pantalla, no te pone en modo peculiar, y no te lleva a peleas en el trabajo.

+1

Mi opinión es que no debería ser un objetivo en sí mismo seguir el estándar. Estamos utilizando html4.0 strict porque queremos garantizar un comportamiento específico del navegador. Entonces mi pregunta es realmente: ¿arriesgo este objetivo al usar atributos personalizados? – KaptajnKold

+0

gran respuesta, MEL – Hardryv

+1

Para responder a su pregunta: El atributo personalizado hace que sea muy conveniente buscar los elementos en el DOM en MooTools: foo.getElements ("[myAttr]") encuentra todos los nodos secundarios de foo con el atributo myAttr. Usar su solución propuesta sería mucho más complejo y potencialmente más lento. – KaptajnKold

0

Si la página se declara como HTML 4 estricta, entonces no debe agregar atributos que no se usan en ese HTML. De manera diferente, no está claro qué se comportarían los navegadores.
Como ya se informó, una forma de agregar atributos adicionales es agregarlos como clases, incluso si eso tiene algunas limitaciones.

1

¿O es concebible que algunos navegadores cambien al "modo peculiar" y visualicen la página como si fuera algo más que el estricto HTML 4.0?

No, los atributos erróneos no forzarán un cambio de modo de representación.

Si no te importa la validación, haz lo que quieras, pero la validación es una herramienta útil para detectar errores simples que, de lo contrario, te podrían obligar a buscar errores. Dado que hay muchas otras alternativas perfectamente buenas para pasar datos a JavaScript, prefiero usar una de ellas, en lugar de renunciar a la validación.

Además, cuando agrega un atributo arbitrario, está jugando efectivamente en un espacio de nombres global. No hay garantía de que algún navegador o estándar futuro no decida usar el nombre 'translationkey' para alguna característica nueva que active su script. Por lo tanto, si debe agregar atributos, déles un nombre oscuro y que sea único, o simplemente use el prefijo HTML5 data-.

Cuestiones relacionadas