Михаил Пожидаев, Алексей Голошумов, Елена Теплых
Научный электронный журнал "Инновации. Наука. Образование", №47, декабрь 2021 г.
Ключевые слова: Java, WWW, веб-браузер, вспомогательные технологии, WebKit.
Представлен способ построения веб-браузера, пригодного для использования людьми с нарушениями зрения на базе веб-движка WebKit из состава JavaFX . Предлагаемый подход позволяет работать с веб-страницами как в текстовом, так и в графическом режиме, поддерживает запуск в различных операционных системах (кроссплатформенность) и сохраняет возможность исполнения сценариев JavaScript.
Роль Интернета в повседневной жизни существенно увеличивается с каждым годом, возрастает объём информации, доступной посредством веб, всё это в сумме приводит к росту требований к программным компонентам, необходимым для работы с веб-страницами. Массовый рынок веб-браузеров заполнен продуктами от известных технологических компаний, таких как Google, Apple, Mozilla и пр., но сохраняется потребность в некоторых специализированных решениях, обеспечивающих возможность работы в веб в нестандартных условиях.
В настоящей работе представлена возможность построения веб-браузера, предназначенного для использования людьми с нарушениями зрения, поддерживающего двойное представление информации (текстовое и графическое) и основанного на виртуальной машине Java с использованием библиотеки для создания интерфейсов JavaFX [2]. Предложенное решение поддерживает исполнение JavaScript и приспособлено для запуска в различных операционных системах, т. е. является кроссплатформенным, что существенно повышает удобство его использования.
Невизуальный веб-браузер, т. е. веб-браузер, подходящий для использования людьми с нарушениями зрения, должен соответствовать следующим требованиям:
В той или иной мере все требования к предлагаемому программному обеспечению встречались в различных продуктах, но ранее не получалось объединить их вместе в едином решении. К примеру, история текстовых веб-браузеров уходит назад не менее, чем на два десятилетия, среди них такие известные пакеты как Lynx, W3m (включая W3m-el — расширение для текстового редактора GNU Emacs) и др. Все они не способны исполнять сценарии на языке JavaScript, поэтому их невозможно рассматривать как приемлемое решение. Исключением является сравнительно недавно появившийся веб-браузер DWB [1], который использует веб-движок WebKit [6], как и решение, описанное ниже.
Традиционные популярные веб-браузеры, такие как Google Chrome, Mozilla Firefox, Apple Safari, Opera и др., не способны переключаться в текстовый режим и отображать содержимое в чёрно-белой палитре. Хотя в той или иной мере они являются кроссплатформенными и могут запускаться не только в привычной всем Microsoft Windows, но и в GNU/Linux, и на прочих платформах. Отметим, что эти веб-браузеры доступны людям с нарушениями зрения, но поддержка вспомогательных технологий для них, в свою очередь, не является кроссплатформенной, а в случае GNU/Linux она сильно зависит от используемого настольного окружения (поддержка утилит экранного доступа в GNOME, как известно, заметно лучше, чем в KDE Plasma и прочих комплектах).
Веб-движку WebKit, встроенному в библиотеку для разработки графических интерфейсов JavaFX, на наш взгляд, до текущего момента сообществом уделялось недостаточно внимания с точки зрения перспектив его применения для решения проблем доступности информации людям с нарушениями зрения. Этот движок, изначально появившийся как KHTML для оконного окружения KDE, позднее был развит компанией Apple и стал основой для серии популярных браузеров, таких как Opera, Chrome, Apple Safari, Яндекс.Браузер и некоторых других. Такое широкое распространение WebKit подтверждает хорошую поддержку веб-стандартов, что крайне немаловажно при выборе основы, от которой в будущем будет зависеть пользовательский опыт.
WebKit, написанный полностью на C++, в варианте для JavaFX хорошо совместим с кодом на Java,
предоставляя возможность выполнения всех необходимых операции взаимодействия.
Разработчики JavaFX могут создавать экземпляры двух классов:
javafx.scene.web.WebCore
и javafx.scene.web.WebView
.
ККласс WebCore
содержит браузерную логику, осуществляющую загрузку веб-страниц и поддерживающую исполнение сценариев на языке JavaScript.
Он не имеет какого-либо графического представления, но разрешает обращение к своим внутренним структурам, описывающим загруженную страницу.
для нас ключевая его возможность — исполнение так называемой JavaScript-инъекции,
т. е. исполнение в контексте загруженной страницы некоторого произвольного сценария JavaScript
с последующим получением результирующего объекта.
Класс WebView
, в свою очередь, предоставляет возможность графического рендеринга веб-страницы, загруженной и предобработанной объектом класса WebCore
.
Обратим внимание, что создание объекта WebView
необязательно, т. е.
если нам нужны только внутренние структуры веб-браузера после загрузки страницы,то мы можем не создавать объект представления.
Это открывает дополнительную возможность включения графического представления по мере необходимости.
Скажем, с приложением веб-браузера работает преимущественно человек без зрения, которому требуется только текстовое содержание страниц,
но в некоторый момент он может столкнуться с ситуацией,
когда необходимая информация доступна только визуально (на практике достаточно распространённая ситуация).
в этом случае он может позвать помощника,
активировав для него графическую версию страницы,
что можно сделать в любой момент.
Объект WebCore
может самостоятельно предоставить DOM загруженной страницы, но, к сожалению, в ней нет геометрической информации о положении того или иного объекта.
для решения этой проблемы Воловодовым Романом Евгеньевичем был разработан скрипт-инъекция,
который может быть вызван в контексте загруженной странице и исполнен.
Этот скрипт выполняет обход дерева объектов и сохраняет полученную информацию.
Поскольку скрипт не очень большой, в Приложении 1 приведён его полный текст.
После его выполнения в пространство виртуальной машины Java будет возвращён объект,
который может быть транслирован в структуры, которые традиционно используются для объектов Java.
При этом сохраняется информация о классе DOM-объекта,
о названии тега, его атрибутах и другие сведения, характерные для элементов HTML.
При исполнении подобной инъекции следует предельно аккуратно следить за доступом к различным частям полученной структуры из потока,
отличного от основного потока JavaFX, поскольку объект WebCore
не гарантирует потокобезопасность.
Фактически, это означает, что после получения структуры из инъекции необходимо полностью склонировать все нужные данные без каких-либо ссылок на исходные записи.
Исходный код прототипа приложения, описываемого в настоящей статье, можно найти в нашем репозитории Git [3]. Он является составной частью платформы невизуальных приложений LUWRAIN [4, 5], которая может использоваться для построения невизуальных интерфейсов для людей с нарушениями зрения на языке Java.
LUWRAIN содержит в себе все основные вспомогательные компоненты, включая механизм взаимодействия с синтезаторами речи, поддержание безопасного взаимодействия потоков для интерфейсных компонентов и пр. в числе прочего платформа расширяет традиционное пользовательское восприятие, привычное большинству людей, использующих утилиты экранного доступа. в частности, добавлены контекстные звуки, которые помогают пользователю лучше ориентироваться на слух, что система занята выполнением фоновой задачи. Ключевой особенностью LUWRAIN является кроссплатформенность, поддерживается запуск как в Microsoft Windows, так и в GNU/Linux.
Прототип описываемого веб-браузера является приложением LUWRAIN, которое имеет прямой доступ к функциям JavaFX. Основной интерфейс LUWRAIN реализован через холст JavaFX, поэтому сочетание этих компонентов не вызывает конфликтов.
Представление структур браузера с необходимыми дополнениями выполнены с использованием элементов управления из состава LUWRAIN. За пределами настоящей статьи остаются вопросы трансформации элементов HTML в пользовательские объекты, что может быть предметом рассмотрения в отдельной работе. По команде пользователя возможно включение графической версии браузера, которое позволяет вернуть режим визуальной работы, включая все механизмы управления при помощи "мыши".
Представленный способ построения веб-браузера позволяет получить и далее развивать приложение для работы в Интернете, преднназначенное для людей с нарушениями зрения. Оно будет обладать следующими преимуществами:
При этом сохраняются следующие недостатки: