Каковы конкретные риски использования пользовательских атрибутов HTML?

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

  •  20-09-2019
  •  | 
  •  

Вопрос

Эта тема вызвала бурную дискуссию в офисе, поэтому мне интересно узнать ваше мнение.

Мы работаем над веб-приложением, ориентированным только на некоторые определенные браузеры.В настоящее время эти браузеры включают различные версии Opera 9 и Mozilla 1.7.12.В будущем нам, вероятно, также придется поддерживать Opera 10 и различные версии WebKit.Но маловероятно, что нам когда-нибудь придется иметь дело с какой-либо версией IE.

Наше веб-приложение декларирует строгий HTML 4.0 в своем типе документа.

Недавно я предложил в качестве решения конкретной проблемы использовать пользовательские атрибуты в HTML.Я предложил что-то вроде этого:

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

Поскольку это недопустимый HTML 4, это не понравилось нашим ребятам из HTML, и мы вступили в спор.

Мой вопрос таков:Каковы риски использования пользовательских атрибутов (если таковые имеются)?Я знаю, что страница не будет проверена, но разве все браузеры не игнорируют неизвестные им атрибуты?Или Возможно ли, что некоторые браузеры перейдут в «режим совместимости» и будут отображать страницу так, как если бы она была чем-то отличным от строгого HTML 4.0??

Обновлять:

Приветствовал собственно поставленный вопрос.

Это было полезно?

Решение

Там нет ограничений/рисков браузера. Только валидатор W3 будет лаять, но лая собаки не кусаются.

А W3 Спец говорит следующее:

  • Если пользовательский агент встречается с атрибутом, который он не распознает, он должен игнорировать всю спецификацию атрибута (т.е. атрибут и его значение).

Т.е. также будет нет рендеринг в режиме Quirks или около того, как могут подумать некоторые. Это сделает это только на недействительных/принудительных документах, а не на недействительных атрибутах.

Тем не менее, имейте в виду, что некоторые библиотеки/фреймворки JavaScript будут «невидимо» добавлять/использовать пользовательские атрибуты HTML в дереве DOM, например, несколько плагинов JQuery. Таким образом, вы можете рисковать столкновениями в атрибутах, потому что это «по совпадению» использует атрибут с тем же именем, что и для своих собственных целей. К сожалению, это часто плохо или даже не документировано вообще.

Другие советы

HTML 5 разрешает пользовательские атрибуты, используя префикс «Data-'», см. http://ejohn.org/blog/html-5-data-attributes/

Если это цель содержать строгое html4.0, то не имеет значения, почему вы хотите поставить пользовательские атрибуты, вы нарушаете цель.

Я думаю, что вопрос, который вам нужно задать, заключается в том, почему вам нужно сломать 4.0 Стронг, чтобы получить нужную функциональность: все, что вы могли бы использовать для вас пользовательский атрибут, вы можете использовать в существующем атрибуте:

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

может быть:

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

Это будут дополнительные циклы, чтобы анализировать всю информацию о классе, но если вы не размещаете информацию о CSS в этом классе, он не меняет дисплей, не ставит вас в режим Quirks и не получает Вы в боях на работе.

Или возможно, что некоторые браузеры изменится на «режим Quirks» и отображают страницу, как если бы это было что -то иное, чем строгий HTML 4.0?

Нет, плохие атрибуты не приведут к изменению режима рендеринга.

Если вы не заботитесь о проверке, сделайте то, что вам нравится, но проверка является полезным инструментом для обнаружения простых ошибок, которые в противном случае могут заставить вас преследовать отладку. Учитывая, что есть много других совершенно хороших альтернатив для передачи данных в JavaScript, я предпочитаю использовать одну из них, а не отказываться от проверки.

Кроме того, когда вы добавляете произвольный атрибут, вы эффективно играете в глобальном пространстве имен. Нет никакой гарантии, что какой -то будущий браузер или стандарт не решат использовать имя «TranslationKey» для какой -то новой функции, которая спустит ваш скрипт. Поэтому, если вы должны добавить атрибуты, дайте им имя, которое неясно и, вероятно, будет уникальным, или просто используйте HTML5 data- префикс уже.

Если страница объявлена ​​строгой по стандарту HTML 4, то на ней не следует добавлять атрибуты, которые не используются в указанном HTML.Иными словами, непонятно, как поведут себя браузеры.
Как уже сообщалось, способ добавления дополнительных атрибутов — это добавление их в виде классов, даже если это имеет некоторые ограничения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top