Не следует ли использовать элемент <noscript>?

Я нашел здесь несколько хороших минусов:

  • Элемент noscript определяет только, включен ли JavaScript в браузере или нет. Если JavaScript отключен в брандмауэре, а не в браузере, JavaScript не будет запущен, а содержимое элемента noscript не будет отображаться.

  • Многие сценарии зависят от конкретной функции или функций поддерживаемого языка, чтобы они могли запускаться (например, document.getElementById). Если требуемые функции не поддерживаются, JavaScript не может работать, но поскольку сам JavaScript поддерживается, содержимое noscript не будет отображаться.

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

  • Элемент noscript является элементом уровня блока и поэтому может использоваться только для отображения целых блоков контента, когда JavaScript отключен. Он не может использоваться inline.

  • В идеале веб-страницы должны использовать HTML для контента, CSS для внешнего вида и JavaScript для поведения. Использование элемента noscript - это применение поведения внутри HTML, а не применение его к JavaScript.

Источник: http://javascript.about.com/od/reference/a/noscriptnomore.htm

Я очень согласен с последней точкой. Есть ли способ сделать и добавить внешний файл <noscript>? Если мы разместим <noscript> в <head>?

Ответ 1

Лучше, чтобы по умолчанию был не-javascript, а затем пусть код javascript перезаписывается на странице с поддержкой javascript. Не должно быть много. Может быть просто блоком display:none;, который затем устанавливается на display:block; по javascript, и наоборот для страницы не-js.

Ответ 2

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

<div id='noscript'>show non-js content</div>
<script>document.getElementById('noscript').style.display='none';</script>
<script id='required script'>show js content</script>

против

<noscript>show non-js content</noscript>
<script id='required script'>//show js content</script>

В зависимости от ситуации есть три случая для рассмотрения:

Случай 1 - При необходимости script является встроенным

отключен JavaScript

  • Содержимое в элементе <noscript> появляется сразу, содержимое не-js показано
  • Содержимое в элементе <div> появляется сразу, отображается не-js-контент

Поддержка JavaScript

  • Содержимое в элементе <noscript> не отображается вообще, отображается отображаемый js
  • Содержимое в элементе <div> может на мгновение появиться перед скрытием, js показанный контент

Для этого случая полезно использовать элемент <noscript>.

Случай 2 - При необходимости script - из внешнего (стороннего) источника, но скрытие элемента <div> выполняется с помощью встроенного script

отключен JavaScript

  • Содержимое в элементе <noscript> появляется сразу, содержимое не-js показано
  • Содержимое в элементе <div> появляется сразу, отображается не-js-контент

Включен JavaScript, но требуется script заблокирован

  • Содержимое в элементе <noscript> не отображается вообще, ничего не отображается!
  • Содержимое в элементе <div> может на мгновение появиться перед скрытием, ничего не отображается!

Включен JavaScript и требуется script

  • Содержимое в элементе <noscript> не отображается вообще, отображается отображаемый js
  • Содержимое в элементе <div> может на мгновение появиться перед скрытием, js показанный контент

Для этого случая полезно использовать элемент <noscript>.

Случай 3 - При необходимости script скрывает элемент <div>

отключен JavaScript

  • Содержимое в элементе <noscript> появляется сразу, содержимое не-js показано
  • Содержимое в элементе <div> появляется сразу, отображается не-js-контент

Включен JavaScript, но требуется script заблокирован

  • Содержимое в элементе <noscript> не отображается вообще, ничего не отображается!
  • Отображается содержимое в элементе <div>, отображается не-js-контент

Включен JavaScript и требуется script

  • Содержимое в элементе <noscript> не отображается вообще, отображается отображаемый js
  • Содержимое в элементе <div> может на мгновение появиться перед скрытием, js показанный контент

Для этого случая полезно использовать элемент <div>.

В заключение

Используйте элемент <noscript>, если рендеринг содержимого HTML зависит от сторонних скриптов или если требуемый script является встроенным. В противном случае используйте элемент <div> и убедитесь, что требуемый script содержит:

document.getElementById('noscript').style.display='none';

Ответ 3

Хотя Tor Valamo имеет элегантный ответ на эту проблему, есть проблема, которая может заставить вас отказаться от использования этой техники.

Проблема (обычно) IE. Он имеет тенденцию загружать и запускать JS немного медленнее, чем другие браузеры, заставляя его иногда включать div "Please Enable Your Javascript" на долю секунды, прежде чем он загрузит JS и скрывает div.

Это раздражает, и обойти это можно с помощью "классики". <noscript> подход к переадресации.

<head>
<noscript><meta http-equiv="refresh" content="0; URL=/NO_SCRIPT_URL/ROUTE_HERE"/></noscript>
</head>

Это самая сложная техника, с которой я столкнулся в отношении этой маленькой неприятности.

Ответ 4

Одно полезное приложение для noscript, которое я видел, - это прогрессивная асинхронная загрузка тяжелого контента (особенно "ниже складки" ). Большие изображения, iframe и т.д. Можно обернуть в noscript в источнике HTML, а затем развернутые элементы могут быть добавлены на страницу с использованием JavaScript после готовности DOM. Это разблокирует страницу и может значительно ускорить первоначальную загрузку, особенно если ваш интерфейс зависит от взаимодействий JS/JQ, применяемых после того, как документ готов (2 секунды против 6 секунд для страницы портфолио, на которую я консультировался).

Ответ 5

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

Тем не менее, если вы собираетесь вернуться к без Javascript, есть гораздо лучший способ, чем тег <noscript>. Просто сделайте это в HEAD вашего документа:

<script type="text/javascript">
    document.getElementsByTagName('html')[0].className += ' Q_js'; // better than noscript
</script>

С помощью этой методики вы можете легко ссылаться на класс Q_js в CSS, чтобы скрыть вещи. С тегом <noscript> лучше всего вы можете надеяться включить дополнительный CSS файл для переопределения предыдущего CSS. Это становится важным, когда некоторые элементы со статическим содержимым должны быть скрыты сразу (а не мерцание), пока Javascript не сделает их более динамичными.

Вкратце, метод, который я предложил, касается всех ваших минусов 1-5, и я считаю, что это строго лучше, чем использование <noscript>.

Ответ 6

простая идее в этот раз ваш сайт может адаптироваться к использованию javascript на медленных устройствах, используя тег noscript, как сущность для всего содержимого вашего сайта ** (ваш html должен быть подготовлен без javascript и всего элементы управления должны работать также, если javascript выключен, пользователи, использующие основные элементы управления html, могут делать все, что они делали раньше, когда javascript был активным. Таким образом, <noscript></noscript> может быть динамическим переключением на один и тот же контент другим способом с теми же результатами = решение проблема, по которой пользователи открывают ваш url). ** Вы можете видеть, что независимо от того, является ли javascript или нет, функциональность веб-сайта может быть "одинаковой" в любых случаях js enabled/disabled. На китайском языке медленные устройства, например: Samsung neo mini phone, этот метод может запускать веб-сайт без каких-либо задержек при низком интернет-трафике. попробуйте запустить этот автоматический двойной сайт функциональности, если js находится в/в случаях:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>
<HEAD>
<TITLE>noscript can change the Internet forever</TITLE>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
$(document).ready(function(){
    $('noscript').replaceWith(function() {
        return this.textContent || this.innerText;
    });
    $("p#javascripton").css("background-color", "yellow"); 
    $("p").click(function(){
        $(this).hide();
    });
}); 
//-->
</SCRIPT>
<noscript>
<p>
Noscript usage today can be logical for <a href="http://google.com/"><p id="javascripton">eg pc/laptop/high quality tablets usage the complete website with all features:images high resolution,javascript<br><h1>OR without javascript so no high resolutions images inserted with a jquery automated script generated from some php+javascript scripts so have usage for 80% mobile application cause almost are from China ,so low quality products=low cpu,low ram :IN THIS CASE SOMEONE CAN THINK TO SWITCH HIS PHONE TO NO JAVASCRIPT USAGE SO IF ANY PROGRAMMER CAN ADAPT AN ENTIRELY APPLICATION TO THE METHOD I USED IN THIS EXAMPLE AUTOMATED HIS BROWSER IS ADAPT FOR ANY RANDOM ACTION ABOUT THE USER CHOISE(YOU UNDERSTAND "TO USE OR NOT JAVASCRIPT") SO HIS CHINESE PHONE CAN BE APROXIMATELLY APROACH LIKE QUALITY OF SPEED EXECUTION THE OTHERS PC/LAPTOPS/TABLETS QUALITY PRODUCTS.<BR><BR>This stupid example is the best example how no script tag can change the quality of services on this planet ,boost the speed of the internet connection and stops unnecessary use of A LOT OF INTERNET TRAFFIC on slow devices..a simple tag can change the entirely dynamic of programmer views so entirely Planet beneficts</h1><p></a> <br>
run this code in two instances :<br>with browser javascript enable <br>and without(browser javascript disable or eg a firefox plugin noscript states on/off)
</p>
</noscript>
</BODY></HTML>

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

Ответ 7

Я создаю полную высоту, полную ширину, позицию: фиксированный div на всех страницах с некоторым id.

<div id='noscript_div' style='position:fixed;z-index:20000000;height:100%;width:100%;line-height:100%;'>enable JS buddy</div>
$('#noscript_div').hide();
$(document).ready(function(event){




});

Я не эксперт. Это сработало для меня. Извините, но этот случай подойдет только в том случае, если вы хотите, чтобы пользователь всегда включал свой javascript.

Ответ 8

чтобы ответить RAAJ, который добавил script

**

<div id='noscript_div' style='position:fixed;z-index:20000000;height:100%;width:100%;line-height:100%;'>enable JS buddy</div>
$('#noscript_div').hide();
$(document).ready(function(event){
});

**

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

Пользовательский интерфейс = U.I. был изобретен для удобства пользователя НЕ ПРОТИВ ПОЛЬЗОВАТЕЛЯ. ** Я НИКОГДА НЕ СОГЛАШАЕТСЯ С ЭТОЙ ПРАКТИКОЙ, ЧТОБЫ ИЗБЕЖАТЬ ДОСТУП, ГДЕ РЕСУРС НЕ ПРОПУСТИТ. ** В качестве моего программиста нужно использовать меньше ресурсов, чтобы решить проблему. Это определяет качество кодирования! По этой причине я написал решение сверху, как это по тем же причинам был изобретен

If {} Else {}

see'Ya ArounD!

Ответ 9

Я рекомендую вам не использовать <noscript>, вы можете использовать следующий код:

<HTML>
<head>
<script>
     window.location="some-page.php";
</script>
</head>
<body>
<p>
    Please active JavaScript .
</p>
</body>
</HTML>

если ни при каких обстоятельствах JS не включен, сообщение будет отображаться иначе, если пользователь перенаправляется на целевую страницу.