7

Как узнать, отключен ли JavaScript?

13

Проблема:

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

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

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

5 ответ(ов)

3

Я хотел бы внести свою малую лепту. Это не на 100% защищенное решение, но, на мой взгляд, оно вполне подходит.

Проблема, по моему мнению, с предпочтительным примером, предлагающим сообщение вроде "Этот сайт не работает без JavaScript", заключается в том, что вам нужно удостовериться, что ваш сайт нормально работает и без JavaScript. И как только вы начнете в этом направлении, вы поймете, что сайт должен быть полностью работоспособным даже с отключенным JS, и это уже значительно увеличивает объем работы.

Итак, что вам на самом деле нужно, так это "редирект" на страницу, которая скажет: "включите JS, глупец". Но, конечно, вы не можете надежно использовать мета-редиректы. Поэтому вот мое предложение:

<noscript>
    <style type="text/css">
        .pagecontainer {display:none;}
    </style>
    <div class="noscriptmsg">
    У вас отключен JavaScript. Удачи с этим.
    </div>
</noscript>

...где весь контент вашего сайта обернут в контейнер div с классом "pagecontainer". CSS внутри тега noscript скроет весь контент страницы, и вместо этого отобразит любое сообщение, которое вы хотите показать пользователю о том, что JavaScript отключен. На самом деле, именно так, по-видимому, работает Gmail... и если это достаточно хорошо для Google, то это подойдет и для моего маленького сайта.

0

Я бы предложил вам поступить иначе и начать с написания ненавязчивого JavaScript.

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

Вы можете подробнее ознакомиться с этой концепцией здесь: https://ru.wikipedia.org/wiki/Ненавязчивый_JavaScript.

0

Если ваш случай использования предполагает наличие формы (например, формы входа) и вашему серверному скрипту нужно определить, включен ли у пользователя JavaScript, вы можете сделать что-то вроде этого:

<form onsubmit="this.js_enabled.value=1;return true;">
    <input type="hidden" name="js_enabled" value="0">
    <input type="submit" value="go">
</form>

Этот код изменит значение переменной js_enabled на 1 перед отправкой формы. Если ваш серверный скрипт получит значение 0, значит, JavaScript не включен. Если же получит 1, значит, JavaScript активен!

0

<noscript> на самом деле не является необходимым, не говоря уже о том, что не поддерживается в XHTML.

Рабочий пример:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
    <title>Мой сайт</title>
    <style>
      #site {
          display: none;
      }
    </style>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script>
      $(document).ready(function() {
          $("#noJS").hide();
          $("#site").show();
      });
    </script>
</head>
<body>
    <div id="noJS">Пожалуйста, включите JavaScript...</div>
    <div id="site">Контент, зависящий от JavaScript...</div>
</body>
</html>

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

0

Используйте класс .no-js на элементе body, чтобы создать стили, не зависящие от JavaScript, на основе классов родителя .no-js. Если JavaScript отключен, вы получите все стили, не зависящие от этого языка. Если же JavaScript поддерживается, класс .no-js будет заменён, и вы получите все стили, как обычно.

Вот пример кода:

document.body.className = document.body.className.replace("no-js", "js");

Этот прием используется в HTML5 Boilerplate (http://html5boilerplate.com/) с помощью Modernizr, но вы можете использовать одну строку JavaScript, чтобы заменить классы.

Теги <noscript> тоже допустимы, но зачем добавлять лишние элементы в HTML, если это можно сделать с помощью CSS? Это более чистый и эффективный подход.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь