Введение
Что такое Javascript
JavaScript изначально создавался для того, чтобы сделать web-страницы «живыми». Планировалось, что Javascript будет эдаким «младшим братом» Java. Однако вскоре он сильно вырос и сейчас это совершенно независимый язык со своей спецификацией, не имеющий никакого отношения к Java.
Программы на этом языке называются скриптами. В браузере они подключаются напрямую к HTML и, как только загружается страничка, тут же выполняются. Программы на JavaScript – обычный текст. Они не требуют какой-то специальной подготовки. Javascript может выполняться не только в браузере, а где угодно. Для этого нужна лишь специальная программа – интерпретатор. Если же рассматривать Javascript как один из языков для создания сайтов, то данной программы не требуется. Во все основные браузеры по умолчанию встроен интерпретатор. Именно поэтому они могут выполнять скрипты на странице.
Что умеет Javascript
Современный JavaScript – это «безопасный» язык программирования общего назначения. Он не предоставляет низкоуровневых средств работы с памятью, процессором, так как изначально был ориентирован на браузеры, в которых это не требуется.
Что же касается остальных возможностей – они зависят от окружения, в котором запущен JavaScript. В браузере JavaScript умеет делать всё, что относится к манипуляции со страницей, взаимодействию с посетителем и, в какой-то мере, с сервером:
- создавать новые HTML-теги, удалять существующие, менять стили элементов, прятать, показывать элементы и т.п.;
- реагировать на действия посетителя, обрабатывать клики мыши, перемещения курсора, нажатия на клавиатуру и т.п.;
- посылать запросы на сервер и загружать данные без перезагрузки страницы (эта технология называется «AJAX»);
- получать и устанавливать cookie, запрашивать данные, выводить сообщения…
Что не умеет Javascript
JavaScript – быстрый и мощный язык, но браузер накладывает на его исполнение некоторые ограничения. Это сделано для безопасности пользователей, чтобы злоумышленник не мог с помощью JavaScript получить личные данные или как-то навредить компьютеру пользователя.
Этих ограничений нет там, где JavaScript используется вне браузера, например, на сервере. Кроме того, современные браузеры предоставляют свои механизмы по установке плагинов и расширений, которые обладают расширенными возможностями, но требуют специальных действий по установке от пользователя.
Javascript не может:
- Читать/записывать произвольные файлы на жесткий диск, копировать их или вызывать программы. Он не имеет прямого доступа к операционной системе.
Возможности по доступу к устройствам также прорабатываются в современных стандартах и частично доступны в некоторых браузерах. - Общаться с другими вкладками и окнами, за исключением случая, когда он сам открыл это окно или несколько вкладок из одного источника (одинаковый домен, порт, протокол).
Есть способы это обойти, но они требуют специального кода на оба документа, которые находятся в разных вкладках или окнах. Без него, из соображений безопасности, залезть из одной вкладки в другую при помощи JavaScript нельзя. - Из JavaScript можно легко посылать запросы на сервер, с которого пришла страница. Запрос на другой домен тоже возможен, но менее удобен, так как и здесь есть ограничения безопасности.
Преимущества Javascript
Javascript предоставляет несколько замечательных возможностей:
- Полная интеграция с HTML/CSS.
- Для создания простых вещей не требуется серьезных знаний данного языка.
- Поддерживается всеми распространенными браузерами и включен по умолчанию.
Что можно считать багом при выключенном Javascript?
Здесь многое зависит от обстоятельств. Для большинства браузеров JavaScript включен по умолчанию, ведь большинству сайтов он необходим для работы. Например, Google Sheets таблицы без JavaScript можно лишь посмотреть, но функционал редактирования будет недоступен.
Но является ли это багом? Ответ – нет. При открытии таблицы показано дружественное сообщение о необходимости JavaScript для корректной работы инструментария, которое дает пользователю знать, что именно не так, и что ему нужно сделать, чтобы получить доступ к редактированию.
JavaScript часто используется для «украшения» сайта. Плавное увеличение изображения, раскрывающееся меню, анимации полей и многое другое – все зачастую реализовано через JavaScript. Но что же делать, если он отключен?
Многие разработчики предусматривают возможность работы сайта без JavaScript, реализовывая функционал в упрощенной форме в HTML или CSS, или перенос части функционала на сервер. Возможно, все выглядит не так красиво, но главное, что весь функционал доступен пользователю и работает корректно.
Иногда разработчики пользуются методом прогрессивного улучшения. Сайт сначала пишется на HTML и реализуется его функционал, а потом этот функционал улучшается, дополняется и расширяется библиотеками JavaScript.
Так что же баг, а что – фича?
Зачастую это полностью зависит от того, как система описана в документации. Если же функциональность при отсутствии включенного JavaScript не затронута документацией, значит нужно полагаться на здравый смысл, так как иногда даже разработчики и заказчики не смогут с уверенностью сказать, баг ли тот или иной сценарий.
Что считать багом при отключенном JavaScript?
- Некорректность работы системы в целом с частыми ошибками.
- Отсутствие важного функционала, который присутствовал при включенном JavaScript.
- Блокирующие работу системы дефекты без пояснений о необходимости JavaScript для работы.
- Отсутствие валидации полей, которая проводилась JavaScript’ом.
- Отправка на сервер некорректных данных (проверяется с серверной стороны или через прокси-сервер).
- Некорректное отображения верстки (графические артефакты, смещения полей и кнопок и т.д.).
- Неработающие кнопки перехода по страницам.
Что багом не является?
- Функционал изменен, но все же присутствует в той или иной форме.
- Измененный дизайн.
- При переходе на другую страницу вся страница перезагружается вместо обновления лишь изменяемого контента.
- Страница не подгружает автоматически новый контент, вместо этого появляется список страниц.
Примеры отображения страницы с выключенным Javascript’ом
Корректное поведение при отключенном JavaScript
Google поиск является хорошим и простым примером.
Первое – дизайн. Так как большая часть сайта полагается на JavaScript для проигрывания анимации, переходов и открытия меню, дизайн был изменен для большего удобства пользования без JavaScript. Пункты меню разделов Google вынесены в заголовок страницы, так как они отображались внутри контейнера, который открывался благодаря JavaScript. Фильтры поиска, которые были реализованы в виде выпадающих меню, отображаются как пункты рядом с результатами поиска.
Второе – функционал. При переходе между вкладками или страницами результатов поиска вся страница перезагружается для того, чтобы отобразить новый контент, который ранее обновлялся JavaScript’ом динамически, без необходимости перезагрузки.
Предупреждение о необходимости JavaScript (VK)
В VK большая часть функционала и управления контентом на странице реализована JavaScript’ом, потому при открытии сайта с отключенным JavaScript, показано сообщение о его необходимости для работы сайта и предлагается использовать мобильную версию сайта, которая не требует JavaScript.
Некорректное поведение при отключенном JavaScript
Отсутствие намеков на необходимость JavaScript (Webmaker.org)
Сайт попросту не отображает никакого контента. Более того, никаких ошибок, говорящих пользователю, что нужно сделать для исправления этой проблемы, не показано.
Отсутствие необходимого функционала
В данном примере, при клике на кнопку «Войти» или «Регистрация» при включенном JavaScript появляется всплывающее окно с полями для авторизации или регистрации в системе. Но при отключенном JavaScript сценарий, который открывает эти окна, не выполняется, следовательно пользователи, которые имеют отключенный JavaScript, не могут войти в свой аккаунт.
Заключение
JavaScript давно является одним из основных способов выполнения сценариев на веб-страницах, потому многие воспринимают его как должное, даже не задумываясь о том, как все будет работать без него.
При тестировании сайта с отключенным JavaScript необходимо понимать, что без него сайт, скорее всего, не будет работать так, как задумано, но основные функции он выполнять должен.
Пользователи без JavaScript будут слишком огорчены, если откроют, например, свой любимый интернет-магазин, чтобы выбрать подарки к празднику и в последний момент поймут, что не могут добавить товар в корзину.
Но и слишком требовательным быть тоже не нужно, ведь если вместо выпадающего меню пользователь видит, что все пункты ему и так доступны, но в немного другом виде – он может это простить.