На веб-странице HTML содержимое внутри тегов noscript не обрабатывается браузерами с расширением блокировки скриптов - PullRequest
4 голосов
/ 01 апреля 2019

На веб-странице HTML содержимое в тегах noscript не обрабатывается браузерами с расширением блокировки сценариев.

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

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 или нет.

Если я установлю, например, расширение источника uBlock или если в Firefox я устанавливаю расширение NoScript (обратите внимание, что имя этого расширения совпадает с тегом noscript), то при перезагрузке страницы, о которой я упоминал

http://www.zen76171.zen.co.uk/aaa2.html

Показывает ccc. Это указывает на то, что скрипты блокируются (так как он не показывает bbb, поэтому эта часть (не отображающая bbb, хороша.

Но результат, который я ожидаю, - aaa ccc, потому что я ожидаю, что «aaa» будет отображаться, когда сценарии отключены и сценарии отключены.

Существует также вторичная проблема, с которой я работаю: когда я отключаю или даже «удаляю» расширение NoScript из Firefox, я получаю тот же ответ «ccc», мне нужно удалить и переустановить Firefox. удалить расширение NoScript. Но сейчас это будет делать, когда я хочу удалить расширение NoScript. У uBlock Origin такой проблемы нет (не нужно переустанавливать браузер, чтобы удалить его!). Поэтому, если кто-то попытается воспроизвести эту проблему, я предлагаю либо использовать блокиратор скриптов, либо, как я, использовать uBlock Origin.

Почему отображается только 'ccc', а не 'aaa ccc' (когда скрипты заблокированы)?

Это касается uBlock Origin или расширения NoScript. Так что, похоже, все, что отключает скрипты.

Итак, почему aaa не отображается никогда. Я думаю, что это должно отображаться, когда сценарии отключены.

Ответы [ 2 ]

4 голосов
/ 01 апреля 2019

Это работает, только если <noscript> находится в body, а не head.И это абсолютно правильно, что так себя ведет.Просто подумайте о настройке любого содержимого внутри <head>: оно не будет отображаться.

Не будет работать: <noscript> in <head>

<!doctype html>
<html>
<head>
    <noscript>aaa</noscript>
    <script>document.write("bbb")</script>
</head>
<body>
    ccc
</body>
</html>

Протестировано с последним Chromeи расширение uBlock Origin в Windows 10 Pro для этого codepen

Будет работать: <noscript> in <body>

<!doctype html>
<html>
<head>
</head>
<body>
    <noscript>aaa</noscript>
    <script>document.write("bbb")</script>
    ccc
</body>
</html>

Протестировано споследнее расширение Chrome и uBlock Origin в Windows 10 Pro для этого codepen

Дополнительно

Вкл. MDN

он говорит (выделение мое)

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

Итак: если в голове разрешены только ссылки, мета и стиль

0 голосов
/ 01 апреля 2019

Расширения блокировки сценариев обычно работают путем блокировки элементов сценария. Они не отключают поддержку JavaScript в браузере.

Поскольку в самом браузере включена поддержка JS, он не отображает noscript элементов.

Используйте взамен прогрессивное улучшение . Начните с контента для браузеров, где JS не работает, затем измените его с помощью JS.

Array.from(
    document.querySelectorAll(".nojs")
).forEach(
    node => node.remove()
);
<span class="nojs">aaa</span> ccc
...