Технология веб-браузера с двойным пользовательским представлением на базе виртуальной машины Java

Михаил Пожидаев, Алексей Голошумов, Елена Теплых

Научный электронный журнал "Инновации. Наука. Образование", №47, декабрь 2021 г.

Ключевые слова: Java, WWW, веб-браузер, вспомогательные технологии, WebKit.

Представлен способ построения веб-браузера, пригодного для использования людьми с нарушениями зрения на базе веб-движка WebKit из состава JavaFX . Предлагаемый подход позволяет работать с веб-страницами как в текстовом, так и в графическом режиме, поддерживает запуск в различных операционных системах (кроссплатформенность) и сохраняет возможность исполнения сценариев JavaScript.

Роль Интернета в повседневной жизни существенно увеличивается с каждым годом, возрастает объём информации, доступной посредством веб, всё это в сумме приводит к росту требований к программным компонентам, необходимым для работы с веб-страницами. Массовый рынок веб-браузеров заполнен продуктами от известных технологических компаний, таких как Google, Apple, Mozilla и пр., но сохраняется потребность в некоторых специализированных решениях, обеспечивающих возможность работы в веб в нестандартных условиях.

В настоящей работе представлена возможность построения веб-браузера, предназначенного для использования людьми с нарушениями зрения, поддерживающего двойное представление информации (текстовое и графическое) и основанного на виртуальной машине Java с использованием библиотеки для создания интерфейсов JavaFX [2]. Предложенное решение поддерживает исполнение JavaScript и приспособлено для запуска в различных операционных системах, т. е. является кроссплатформенным, что существенно повышает удобство его использования.

1. Требования к невизуальному браузеру и обзор существующих решений

Невизуальный веб-браузер, т. е. веб-браузер, подходящий для использования людьми с нарушениями зрения, должен соответствовать следующим требованиям:

  1. Поддержка JavaScript. Веб-браузер должен уметь исполнять сценарии на языке JavaScript. Веб-ресурсов, которые могут оставаться пригодными для посещения без поддержки JavaScript, сегодня крайне мало. Несмотря на то, что сценарии JavaScript служат в основном декоративным целям, их работа нередко глубоко интегрирована в логику работы сайта. В результате отсутствие их поддержки приводит к существенным нарушениям корректной навигации.
  2. Показ содержимого веб-страницы в текстовом виде. Возможность отформатировать содержимое веб-страницы для представления в виде цельного текста обычно существенно повышает удобство пользователей с нарушениями зрения. Структурная навигация, чаще всего поддерживаемая популярными веб-браузерами, дополненными утилитами экранного доступа, требует существенно большего времени на исследование веб-контента. Если отдельно представить все структурные блоки в виде целостного текста с традиционной для текста навигацией, это заметно ускоряет беглый просмотр веб-ресурсов. Более того, структурная навигация в графическом режиме хуже подходит для людей с ослабленным зрением, которым требуется отображение информации контрастной палитрой. Текст можно отобразить на экране моноширинным шрифтом с чёрно-белой палитрой.
  3. Поддержка различных операционных систем. Популярные существующие веб-браузеры могут быть запущены в различных операционных системах: Microsoft Windows, GNU/Linux, MacOS и пр. При этом интеграция с утилитами экранного доступа носит фрагментированный характер и нередко заметно отличается по своему качеству между операционными системами. Большой удачей была бы разработка решения, доступного людям с нарушениями зрения, способного функционировать одинаково устойчиво в различных операционных системах.

В той или иной мере все требования к предлагаемому программному обеспечению встречались в различных продуктах, но ранее не получалось объединить их вместе в едином решении. К примеру, история текстовых веб-браузеров уходит назад не менее, чем на два десятилетия, среди них такие известные пакеты как 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 и прочих комплектах).

2. Описание архитектуры невизуального веб-браузера

Веб-движку 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 необязательно, т. е. если нам нужны только внутренние структуры веб-браузера после загрузки страницы,то мы можем не создавать объект представления. Это открывает дополнительную возможность включения графического представления по мере необходимости. Скажем, с приложением веб-браузера работает преимущественно человек без зрения, которому требуется только текстовое содержание страниц, но в некоторый момент он может столкнуться с ситуацией, когда необходимая информация доступна только визуально (на практике достаточно распространённая ситуация). в этом случае он может позвать помощника, активировав для него графическую версию страницы, что можно сделать в любой момент.

3. Получение структуры загруженной страницы

Объект WebCore может самостоятельно предоставить DOM загруженной страницы, но, к сожалению, в ней нет геометрической информации о положении того или иного объекта. для решения этой проблемы Воловодовым Романом Евгеньевичем был разработан скрипт-инъекция, который может быть вызван в контексте загруженной странице и исполнен. Этот скрипт выполняет обход дерева объектов и сохраняет полученную информацию. Поскольку скрипт не очень большой, в Приложении 1 приведён его полный текст. После его выполнения в пространство виртуальной машины Java будет возвращён объект, который может быть транслирован в структуры, которые традиционно используются для объектов Java. При этом сохраняется информация о классе DOM-объекта, о названии тега, его атрибутах и другие сведения, характерные для элементов HTML.

При исполнении подобной инъекции следует предельно аккуратно следить за доступом к различным частям полученной структуры из потока, отличного от основного потока JavaFX, поскольку объект WebCore не гарантирует потокобезопасность. Фактически, это означает, что после получения структуры из инъекции необходимо полностью склонировать все нужные данные без каких-либо ссылок на исходные записи.

4. Реализация и интеграция со вспомогательными технологиями

Исходный код прототипа приложения, описываемого в настоящей статье, можно найти в нашем репозитории Git [3]. Он является составной частью платформы невизуальных приложений LUWRAIN [4, 5], которая может использоваться для построения невизуальных интерфейсов для людей с нарушениями зрения на языке Java.

LUWRAIN содержит в себе все основные вспомогательные компоненты, включая механизм взаимодействия с синтезаторами речи, поддержание безопасного взаимодействия потоков для интерфейсных компонентов и пр. в числе прочего платформа расширяет традиционное пользовательское восприятие, привычное большинству людей, использующих утилиты экранного доступа. в частности, добавлены контекстные звуки, которые помогают пользователю лучше ориентироваться на слух, что система занята выполнением фоновой задачи. Ключевой особенностью LUWRAIN является кроссплатформенность, поддерживается запуск как в Microsoft Windows, так и в GNU/Linux.

Прототип описываемого веб-браузера является приложением LUWRAIN, которое имеет прямой доступ к функциям JavaFX. Основной интерфейс LUWRAIN реализован через холст JavaFX, поэтому сочетание этих компонентов не вызывает конфликтов.

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

Заключение

Представленный способ построения веб-браузера позволяет получить и далее развивать приложение для работы в Интернете, преднназначенное для людей с нарушениями зрения. Оно будет обладать следующими преимуществами:

При этом сохраняются следующие недостатки:

  1. WebKit из состава JavaFX не иимеет поддержки процессоров с архитектурой ARM;
  2. Отсутствует поддержка расширений в форматах для популярных браузеров.

Список литературы

  1. DWB. – URL: https://github.com/diab0l/dwb
  2. JavaFX. – URL: https://openjfx.io/
  3. LUWRAIN Browser. – URL: https://github.com/luwrain/browser.git
  4. Pozhidaev, M. S. Introducing Luwrain. Can GNU/Linux help us rethink accessibility solutions for the blind? / M. S.
  5. Pozhidaev // https://www.linuxjournal.com/content/july-2015-issue-linux-journal-mobile/ pp. 82–91.
  6. Pozhidaev, M. S. The framework for accessible applications : text-based case for blind people / M. S. Pozhidaev // ACM DL. Proceeding CEE SECR`14. Proceedings of the 10th Central and Eastern European Software Engineering Conference in Russia. Article No 22. ACM NY USA 2014. — ISSN: 978–1–4503–2889–0. DOI 10.1145/2687233.2687234.
  7. WebKit. – URL: https://webkit.org/