Статьи

Как избежать злого JavaScript

Следующее переиздано из Tech Times # 158 .

Что делает JavaScript злом, и могут ли новички научиться писать хороший код JavaScript с первого дня? Кэмерон Адамс и я решили написать книгу, которая доказывает, что они могут, но это не так легко, как я надеялся.

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

  1. пользователи без браузеров с поддержкой JavaScript
  2. пользователи, которые просматривают без использования мыши
  3. пользователи, которые просматривают с помощью программы чтения с экрана

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

На прошедшей на прошлой неделе встрече группы веб-стандартов в Мельбурне Джеймс Эдвардс (по совпадению, соавтор Кэмерона Адамса по «Антологии JavaScript» ) подвел итоги очень аккуратно:

«Предпочтение одного человека — это реальная потребность другого человека. Может случиться так, что группе пользователей будет легче с Ajax, но если другая группа пользователей найдет это абсолютно невозможным, то вы убираете людей и делаете это практически даром.

«Я думаю, что это иерархия, в основном, где доступность является наиболее важной вещью, а удобство использования — следующим, а предпочтение, дизайн и эстетика — следующими. Все эти вещи важны, но если одно влияет на другое, тогда вы должны подумать, что является наиболее важным.

«И, на мой взгляд, доступность всегда важнее всего, потому что доступность влияет на то, что людям действительно нужно. Все остальное — просто предпочтение ».

Джеймс закончил свое выступление призывом к Ajax-счастливым разработчикам избегать использования Ajax, если это вообще возможно, если вы не можете сделать это без ущерба для доступности вашего сайта. Джеймс говорил конкретно об Ajax, но тот же аргумент можно привести в отношении JavaScript в целом.

Таким образом, возникает вопрос: можем ли мы разумно ожидать, что новички в JavaScript будут писать код, который не ухудшает доступность?

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

Пользователи, у которых нет браузеров с поддержкой JavaScript

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

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

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

Пользователи, которые просматривают без использования мыши

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

В большинстве случаев навигация с помощью клавиатуры не сложнее в реализации, чем навигация с помощью мыши. Все, что нужно, это немного подумать и немного дополнительного кода для обработки этого альтернативного метода взаимодействия. Например, вам нужно убедиться, что пользователи могут получить доступ к каждому «активному» элементу на странице с помощью клавиатуры (обычно с помощью клавиши Tab), и предпринимать аналогичные действия после этого.

Поддержка взаимодействия с клавиатурой в качестве первоклассного гражданина — это то, чему вы можете научить новичков с того момента, как они начнут писать интерактивный JavaScript.

Пользователи, которые просматривают с помощью программы чтения с экрана

Здесь все становится сложнее. В настоящее время лучший доступный опыт просмотра веб-страниц для многих слабовидящих пользователей — это программа для чтения с экрана. Программа чтения с экрана располагается поверх веб-браузера на рабочем столе, читает вслух страницу и предоставляет дополнительные способы навигации по контенту и выполнения таких задач, как заполнение форм.

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

Тем не менее, есть некоторые ограничения, которые в значительной степени универсальны. Два из них особенно актуальны для разработки JavaScript:

  • Программы чтения с экрана не читают содержимое, которое скрыто, установив для свойства CSS display значение none.
  • Программы чтения с экрана работают со статическим снимком страницы, который иногда обновляется в процессе, который не может быть инициирован или обнаружен разработчиком.

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

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

На другом конце спектра мы можем принять просьбу Джеймса Эдвардса близко к сердцу и избегать использования JavaScript в целом, чтобы максимизировать доступность.

Я считаю, что подход к поощрению у начинающих находится где-то посередине. Сообщите им об этой проблеме, продемонстрируйте несколько простых способов, которыми вы можете обслуживать пользователей программ чтения с экрана в своих сценариях (например, используя позиционирование вне экрана / вне экрана, чтобы скрыть элементы вместо отображения: нет), и дайте им возможность принимать обоснованные решения о доступности их собственных сценариев.

Таким образом, это подход, который мы используем с JavaScript и доступностью в нашей книге. Будет ли каждый пример отлично работать во всех программах чтения с экрана? Почти наверняка нет. Но пользователи клавиатуры будут обслужены, и мы предоставим легкодоступную альтернативу для программ чтения с экрана всякий раз, когда это имеет смысл.

И вы простите нас за то, что вы немного гордитесь написанием единственной книги для начинающих, посвященной JavaScript, которая предоставляет доступность с самой первой страницы.