Как определить, отключен ли JavaScript?

Недавно я столкнулся с той же проблемой. Моя версия eclipse не поддерживала java-версию 8.

Я случайно установил jre 8 на моем компьютере, который автоматически обновил мою переменную PATH, добавив «C: \ ProgramData \ Oracle \ Java \ javapath "в начале процесса, который затмил eclipse, чтобы забрать эту версию (и игнорировать добавленную вручную версию 1.6, которая появилась позже в порядке) и сбой с кодом выхода 13.

Я просто удалил эту строку из путь, из-за которого система подбирала мою старшую версию, и затмение началось просто отлично.

642
задан 5 revs, 3 users 47% 9 October 2017 в 02:50
поделиться

18 ответов

Я предполагаю, что Вы пытаетесь решить, предоставить ли улучшенное JavaScript содержание. Лучшие реализации ухудшаются чисто, так, чтобы сайт все еще работал без JavaScript. Я также предполагаю, что Вы имеете в виду обнаружение серверной стороны, вместо того, чтобы использовать <noscript> элемент по необъясненной причине.

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

280
ответ дан 4 revs, 3 users 67% 9 October 2017 в 02:50
поделиться

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

4
ответ дан MrVolley 9 October 2017 в 02:50
поделиться

Вы могли бы, например, использовать что-то как document.location = 'java_page.html' для перенаправления браузера к новой, загруженной сценарием странице. Отказ перенаправить подразумевает, что JavaScript недоступен, в этом случае можно или обратиться к CGI ro utines или ввести соответствующий код между тегами. (ОТМЕТЬТЕ: NOSCRIPT только доступен в Netscape Navigator 3.0 и.)

кредит http://www.intranetjournal.com/faqs/jsfaq/how12.html

5
ответ дан Brad8118 9 October 2017 в 02:50
поделиться

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

<script type="javascript">
    ... construction of ajaxy-link,  setting of "js-enabled" cookie flag, etc..
</script>
<noscript>
    <a href="next_page.php?nojs=1">Next Page</a>
</noscript>

, Пользователи без js доберутся эти next_page ссылка - можно добавить параметры здесь так, чтобы Вы знали на следующей странице, приехали ли они по ссылке JS/non-JS или пытаются установить cookie через JS, отсутствие которого подразумевает, JS отключен. Оба из этих примеров довольно тривиальны и открыты для управления, но Вы получаете идею.

, Если Вы хотите чисто статистическую идею того, сколько из Ваших пользователей отключили JavaScript, Вы могли сделать что-то как:

<noscript>
    <img src="no_js.gif" alt="Javascript not enabled" />
</noscript>

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

вышеупомянутый подход (отслеживание изображения) не будет работать хорошо на текстовые браузеры или тех, которые не поддерживают js вообще, поэтому если Ваша база пользователей колеблется, прежде всего, к той области, это не могло бы быть лучшим подходом.

196
ответ дан 5 revs, 2 users 97% 9 October 2017 в 02:50
поделиться

Вы захотите смотреть на тег noscript.

<script type="text/javascript">
...some javascript script to insert data...
</script>
<noscript>
   <p>Access the <a href="http://someplace.com/data">data.</a></p>
</noscript>
13
ответ дан 2 revs, 2 users 95%anon 9 October 2017 в 02:50
поделиться

Обнаружить его в какой? JavaScript? Это было бы невозможно. Если Вы просто хотите его для входа целей, Вы могли бы использовать своего рода схему отслеживания, где каждая страница имеет JavaScript, который выполнит запрос для специального ресурса (вероятно, очень маленькое gif или подобный). Тем путем можно просто взять различие между уникальными запросами страницы и запросами на файл отслеживания.

3
ответ дан Hank Gay 9 October 2017 в 02:50
поделиться

Люди уже отправили примеры, которые являются хорошими вариантами для обнаружения, но на основе Вашего требования "дают предупреждение, что сайт не в состоянии функционировать правильно без браузера, имеющего включенный JS". Вы в основном добавляете элемент, который появляется так или иначе на странице, например, 'всплывающие окна' на Переполнении стека при приобретении значка, с соответствующим сообщением, затем удаляют это с некоторым JavaScript, который работает, как только страница загружается (и я имею в виду DOM, не целую страницу).

4
ответ дан roryf 9 October 2017 в 02:50
поделиться

Техника, которую я использовал в прошлом, должна использовать JavaScript для записи сеансовых куки, которые просто действуют как флаг, чтобы сказать, что JavaScript включен. Тогда серверный код ищет этот cookie и если это не найдено, принимает меры как соответствующий. Конечно, эта техника действительно полагается на включенные куки!

4
ответ дан John Topley 9 October 2017 в 02:50
поделиться

Можно использовать простой отрывок JS для устанавливания значения скрытого поля. Когда отправлено назад Вы знаете, был ли JS включен или нет.

Или можно попытаться открыть всплывающее окно, которое Вы закрываете быстро (но это могло бы быть видимо).

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

13
ответ дан rslite 9 October 2017 в 02:50
поделиться

Если Ваш вариант использования - то, что у Вас есть форма (например, форма входа в систему), и Ваш сценарий серверной стороны должен знать, включили ли пользователю 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, никакой JS. Если это получает 1, JS!

44
ответ дан Andrew Hedges 9 October 2017 в 02:50
поделиться

Я предложил бы, чтобы Вы пошли наоборот путем записи незаметного JavaScript.

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

https://en.wikipedia.org/wiki/Unobtrusive_JavaScript

42
ответ дан 2 revs, 2 users 67% 9 October 2017 в 02:50
поделиться

Если JavaScript будет отключен, то Ваш клиентский код не будет работать так или иначе, таким образом, я предположу, что Вы подразумеваете желание той информации доступная серверная сторона. В этом случае noscript менее полезен. Вместо этого я имел бы скрытый вход и использовал бы JavaScript для заполнения значения. После того, как Ваш следующий запрос или обратная передача, если значение - там Вы, знают, что JavaScript включен.

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

8
ответ дан 2 revs 9 October 2017 в 02:50
поделиться

Тег noscript работает хорошо, но потребует, чтобы каждый дополнительный запрос страницы продолжил служить бесполезным файлам JS, так как по существу noscript является клиентской проверкой.

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

возможность А состоит в том, чтобы динамично добавить 1x1 изображение с помощью JavaScript, где атрибут src является на самом деле серверным сценарием. Весь этот сценарий делает, сохраняет к текущему сеансу пользователя, который JS включен ($ _SESSION ['js_enabled']). Можно тогда произвести 1x1 пустое изображение назад к браузеру. Сценарий не будет работать за пользователями, у которых есть JS, отключенный, и следовательно $ _SESSION ['js_enabled'] не будет установлен. Тогда для дальнейших страниц, подаваемых этому пользователю, можно решить, включать ли все внешние файлы JS, но Вы будете всегда хотеть включать проверку, так как некоторые Ваши пользователи могли бы использовать дополнение NoScript Firefox или иметь JS, отключенный временно по некоторой другой причине.

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

12
ответ дан David Wees 9 October 2017 в 02:50
поделиться

Это - то, что работало на меня: это перенаправляет посетителя, если JavaScript отключен

<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>
46
ответ дан 2 revs, 2 users 89%Ernie13 9 October 2017 в 12:50
поделиться

При добавлении обновления в meta внутри noscript не является хорошей идеей.

  1. Поскольку тег noscript не XHTML совместимый

  2. Значение атрибута "Обновление" нестандартно, и не должно использоваться. "Обновление" берет на себя управление на расстоянии в одна страница от пользователя. Используя "Обновление" вызовет отказ в Инструкциях по Доступности веб-контента W3C---Ссылка http://www.w3schools.com/TAGS/att_meta_http_equiv.asp.

2
ответ дан 22 November 2019 в 21:49
поделиться

Почему бы вам просто не поставить взломанный обработчик событий onClick (), который будет срабатывать только при включенном JS, и использовать его для добавления параметра (js = true) к выбранному / нажатому URL-адрес (вы также можете обнаружить раскрывающийся список и изменить значение - добавить скрытое поле формы). Итак, теперь, когда сервер видит этот параметр (js = true), он знает, что JS включен, а затем выполняет свою причудливую логику на стороне сервера.
Обратной стороной этого является то, что когда пользователь впервые заходит на ваш сайт, закладку, URL-адрес, URL-адрес, сгенерированный поисковой системой, вам нужно будет определить, что это новый пользователь, поэтому не ищите NVP, добавленную в URL-адрес, и серверу придется ждать следующего щелчка, чтобы определить, включен / отключен пользователь JS. Кроме того, еще одним недостатком является то, что URL-адрес попадет в URL-адрес браузера, и если этот пользователь затем закладки этот URL-адрес, он будет иметь js = true NVP, даже если у пользователя не включен JS, хотя при следующем щелчке сервер будет разумно знать, включен ли у пользователя JS или нет. Вздох ... это весело ...

3
ответ дан 22 November 2019 в 21:49
поделиться

Поскольку я всегда хочу дать браузеру что-то стоящее, чтобы взглянуть на него, я часто использую этот трюк:

Во-первых, любая часть страницы, для которой требуется JavaScript для правильной работы (включая пассивные элементы HTML которые изменяются через вызовы getElementById и т. д.) предназначены для использования как есть с предположением, что там ISN'T javaScript доступен. (оформлен так, как будто его там не было)

Любые элементы, для которых требуется JavaScript, я помещаю в тег, например:

<span name="jsOnly" style="display: none;"></span>

Затем в начале моего документа я использую .onload или document.ready в цикле getElementsByName ('jsOnly') , чтобы установить .style.display = ""; , чтобы снова включить JS-зависимые элементы. Таким образом, браузеры, не использующие JS, никогда не должны видеть зависимые от JS части сайта, и если они у них есть, они появляются сразу же по мере готовности.

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

11
ответ дан 22 November 2019 в 21:49
поделиться

Чтобы заставить пользователей включить сценарии JavaScripts, я установил атрибут href для каждой ссылки на один и тот же документ, который уведомляет пользователя о необходимости включения сценариев Java или загрузки Firefox (если они не знают, как включить сценарии Java). Я сохранил фактический URL-адрес ссылки для атрибута «name» ссылок и определил глобальное событие onclick, которое считывает атрибут «name» и перенаправляет туда страницу.

Это хорошо работает для моей пользовательской базы, хотя и немного фашистски;).

3
ответ дан 22 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: