Sobre este problema HTML
A especificação HTML define um conjunto específico de atributos globais (como class, id, title, style, etc.) que são permitidos em todos os elementos, além de atributos específicos de elemento para certas tags. Qualquer atributo que não faça parte destes conjuntos padrão e não siga a convenção de atributo personalizado data-* é considerado inválido e irá desencadear um erro de validação.
Este problema é especialmente comum com integrações antigas de ferramentas de terceiros como ShareThis, AddThis, ou widgets similares de partilha social, particularmente quando incorporados através de um CMS como Drupal ou WordPress. Estas implementações antigas dependiam de atributos proprietários como displayText, st_url, e st_title diretamente em elementos <span> ou outros. Versões modernas destas ferramentas migraram desde então para atributos data-* válidos.
Por que isto é importante
- Conformidade com padrões: Atributos não padrão violam a especificação HTML, o que significa que o seu markup é tecnicamente inválido e pode comportar-se de forma imprevisível entre navegadores.
-
Compatibilidade futura: Os navegadores poderiam introduzir um atributo nativo
displaytextno futuro com comportamento completamente diferente, causando conflitos com o seu código. - Acessibilidade: Tecnologias assistivas dependem de HTML bem formado. Atributos não padrão podem confundir leitores de ecrã ou outras ferramentas que analisam o DOM.
-
Manutenibilidade: Usar a convenção padronizada
data-*torna imediatamente claro para outros programadores que um atributo contém dados personalizados, melhorando a legibilidade do código.
Como corrigir
-
Identifique todos os atributos não padrão nos seus elementos (ex:
displayText,st_url,st_title). -
Adicione o prefixo
data-a cada um para convertê-lo num atributo de dados personalizado válido (ex:data-displaytext,data-st-url,data-st-title). -
Atualize qualquer JavaScript que referencie estes atributos. Se o JavaScript os acede via
element.getAttribute('displayText'), altere paraelement.getAttribute('data-displaytext')ou use a APIdataset(element.dataset.displaytext). -
Se usar um CMS ou plugin de terceiros, atualize o plugin ou módulo para a sua versão mais recente, que provavelmente já usa atributos
data-*válidos.
Note que os nomes de atributos data-* devem ser em minúsculas. Mesmo que o atributo original usasse camelCase como displayText, a versão corrigida deve ser data-displaytext.
Exemplos
Inválido: Atributo não padrão num <span>
<span class="st_sharethis" displaytext="ShareThis" st_url="https://example.com" st_title="My Page">
Share
</span>
Isto desencadeia erros de validação para displaytext, st_url, e st_title porque nenhum destes são atributos HTML válidos.
Válido: Usando atributos data-*
<span class="st_sharethis" data-displaytext="ShareThis" data-st-url="https://example.com" data-st-title="My Page">
Share
</span>
Aceder a atributos data-* em JavaScript
Se o seu JavaScript dependia dos nomes de atributos antigos, atualize as referências:
<span id="share-btn" data-displaytext="ShareThis">Share</span>
<script>
const btn = document.getElementById('share-btn');
// Usando getAttribute
const text = btn.getAttribute('data-displaytext');
// Usando a API dataset
const textAlt = btn.dataset.displaytext;
</script>
Válido: Usando um atributo padrão em alternativa
Em alguns casos, a intenção de displaytext é simplesmente fornecer uma etiqueta ou tooltip. Se for esse o caso, um atributo padrão como title pode ser mais apropriado:
<span class="st_sharethis" title="ShareThis">Share</span>
Escolha a abordagem que melhor corresponde ao seu caso de uso — data-* para dados personalizados consumidos por JavaScript, ou um atributo HTML semântico se já existe um que serve o propósito.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.