Каковы конкретные риски использования пользовательских атрибутов HTML? - PullRequest
9 голосов
/ 18 декабря 2009

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

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

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

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

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

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

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

Обновление:

Уточнил актуальный вопрос.

Ответы [ 6 ]

13 голосов
/ 18 декабря 2009

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

w3 spec говорит следующее:

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

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

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

10 голосов
/ 18 декабря 2009

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

9 голосов
/ 18 декабря 2009

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

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

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

может быть:

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

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

2 голосов
/ 18 декабря 2009
1 голос
/ 18 декабря 2009

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

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

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

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

0 голосов
/ 18 декабря 2009

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

...