У меня есть страница
http://www.zen76171.zen.co.uk/aaa2.html
с этим HTML
<!doctype html>
<html>
<head>
<noscript>aaa</noscript>
<script>document.write("bbb")</script>
</head>
<body>
ccc
</body>
</html>
Я понимаю, что содержимое тега noscript должно запускаться, если браузер не запускает JavaScript.
В Chrome или Firefox, без каких-либо расширений, блокирующих что-либо, я получаю вывод bbb ccc. Это нормально, это имеет смысл. 'bbb' отображается, потому что javascript разрешен, а ccc отображается, потому что он покажет, включен javascript или нет.
Затем я пытаюсь установить NoScript в Firefox. https://addons.mozilla.org/en-GB/firefox/addon/noscript/
Теперь, когда я перезагружаю страницу, о которой я упоминал,http://www.zen76171.zen.co.uk/aaa2.html
Это показывает ccc
. Это указывает мне на то, что скрипты блокируются, так что эта часть хороша.
Но я ожидал бы вывода aaa ccc
, потому что я ожидал бы, что «aaa» будет отображаться, когда скрипты отключены, а скрипты отключены.
Есть также вторичная проблема, которую я обхожу, а именно, если я отключаю или даже «удаляю» NoScript из Firefox, то я все равно получаю тот же ответ «ccc», мне приходится удалять и переустанавливать Firefox, чтобы удалить NoScript. Но на данный момент этого будет достаточно, когда я захочу удалить NoScript.
Вопрос: почему отображается только «ccc», а не «aaa ccc»?
добавлен
На самом деле я получаю только 'ccc', показанный с 'uBlock Origin'. Если я устанавливаю 'uBlock Origin' и выбираю оставить как есть, чтобы не отключать скрипты, то я получаю 'bbb ccc' (нормально). Тогда как если я нажимаю, чтобы отключить скрипты на странице, то я получаю 'ccc'. 'aaa' не отображается.
решение1
Тег noscript был неправильно использован, в то время как расширение браузера работает правильно. Кроме того, результат страницы может быть кэширован, поэтому, вероятно, потребуется жесткое обновление (перезагрузка с переопределением кэша).
Неправильное использование
Но я бы ожидал вывода «aaa ccc», потому что я ожидал, что «aaa» будет отображаться, когда скрипты отключены, а скрипты отключены.
Нет, ожидаемый вывод «aaa» не будет показан, поскольку тег noscript был использован неправильно.
HTML-тег noscript на W3schoolsдает краткое объяснение использования:
Определение и использование[...]
Элемент <noscript> можно использовать как в <head>, так и в <body>.
При использовании внутри элемента <head>: <noscript> должен содержать только элементы <link>, <style> и <meta>.
Различия между HTML 4.01 и HTML5
В HTML 4.01 тег <noscript> можно использовать только внутри элемента <body>.
В HTML5 тег <noscript> можно использовать как внутри <head>, так и внутри <body>.
Другими словами, тег noscript, используемый OP, действителен на основе HTML5, но это не следуетстандарт HTML. Тег noscript в HTML-элементе headне должнасодержать любой «свободный текст».
Результат страницы
Есть еще одна вторичная проблема, которую я обхожу: если я отключаю или даже «удаляю» NoScript из Firefox, то я все равно получаю тот же ответ «ccc» [...]
Большинство браузеров, включая Firefox, используют кэш по умолчанию, поэтому, скорее всего, потребуется жесткое обновление. Это можно легко воспроизвести в любое время, если только пользователь не настроил поведение кэша по-другому.
Несоответствие 1: Жесткое обновление выполняется с помощью сочетания клавиш, которое может быть Ctrl+ F5или Ctrl+ Shift+ Rдля Firefox. В случае расширения браузера эффект кэширования может сохраняться до тех пор, пока браузер не будет перезапущен (пользовательский опыт может отличаться).
Если я устанавливаю 'uBlock Origin' и выбираю оставить как есть, чтобы не отключать скрипты, то получаю 'bbb ccc' (нормально). А если я нажимаю отключить скрипты на странице, то получаю 'ccc'. 'aaa' не отображается.
Тег noscript, содержащий 'aaa', вероятно, игнорируется или опускается расширениями, поскольку использование 'aaa' не соответствует стандарту HTML. Тег noscript в элементе HTML head должен содержать только три элемента, как указано выше.
Несоответствие 2: Результатом страницы будет 'bbb ccc' также при локальном просмотре HTML-файла в Firefox, даже если включен uBlock Origin и отмечена расширенная опция "Отключить JavaScript". Это, вероятно, связано с ограниченным разрешением, предоставленным расширениям в Firefox Quantum. Другими словами, расширение браузера не может заблокировать скрипт для локальной HTML-страницы, отображаемой черезсхема URI файла(не через локальный хост, запущенный веб-сервером, что уже совсем другой вопрос).
Попробуйте еще раз
Рассмотрим измененное содержимое HTML следующим образом:
<!doctype html>
<html>
<head>
<noscript>aaa<style>#this {color:#cccccc;}</style></noscript>
<script>document.write("bbb")</script>
</head>
<body>
<noscript>nnn</noscript>
<span id="this">ccc</span>
</body>
</html>
Затем загрузите HTML-код в Firefox с помощью uBlock Origin, сняв (ВЫКЛ) или отметив (ВКЛ) флажок «Отключить JavaScript».
- Если «Отключить JavaScript» выключено, то результатом будет «bbb ccc»
- Если «Отключить JavaScript» включено, то результатом будет «nnn ccc», где «nnn» отображается из тега noscript в HTML-элементе body, а «ccc» наследует цвет из тега noscript в HTML-элементе head.
- В обоих случаях «aaa» никогда не будет отображаться, как объяснялось ранее (не соответствует стандарту)
Несоответствие 3: 'aaa' будет виден только если JavaScript отключен в самом браузере (скрытая конфигурация Firefox, about:config - "javascript.enabled" установлен на "false"). В качестве альтернативы используйте любой текстовый браузер, чтобы увидеть аналогичный результат. Это отличается от опции, предоставляемой расширением браузера, которое Firefox Quantum ограничилпо дизайну.
TL;DRИспользуйте тег noscript в HTML-элементе body, чтобы сделать текст видимым, когда скрипт отключен. Расширение браузера работает правильно в соответствии со стандартом HTML, но имеет ограничения по дизайну.