Почему в Firefox эта страница отображается таким образом (содержимое тега noscript игнорируется) при запуске NoScript или uBlock Origin?

Почему в Firefox эта страница отображается таким образом (содержимое тега noscript игнорируется) при запуске NoScript или uBlock Origin?

У меня есть страница

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, но имеет ограничения по дизайну.

Связанный контент