Що таке 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
Відсутність натяків на необхідність JavaScript (Webmaker.org)
Сайт просто не відображає ніякого контенту. Більше того, ніяких помилок, які говорять користувачеві, що потрібно зробити для виправлення цієї проблеми, не показано.
Відсутність необхідного функціоналу
В даному прикладі під час натискання на кнопку «Увійти» або «Реєстрація» при включеному JavaScript з'являється спливаюче вікно з полями для авторизації або реєстрації в системі. Але при відключеному JavaScript сценарій, який відкриває ці вікна, не виконується, отже користувачі, які мають відключений JavaScript, не можуть увійти в свій аккаунт.
Висновок
JavaScript давно є одним з основних способів виконання сценаріїв на веб-сторінках, тому багато хто сприймає його як належне, навіть не замислюючись про те, як все буде працювати без нього.
При тестуванні сайту з відключеним JavaScript необхідно розуміти, що без нього сайт, швидше за все, не буде працювати так, як замислено, але основні функції він виконувати повинен.
Користувачі без JavaScript будуть занадто засмучені, якщо відкриють, наприклад, свій улюблений інтернет-магазин, щоб вибрати подарунки до свята і в останній момент зрозуміють, що не можуть додати товар в кошик.
Але і занадто вимогливим бути теж не потрібно, адже якщо замість випадаючого меню користувач бачить, що всі пункти йому і так доступні, але в трохи іншому вигляді – він може це пробачити.