Firefox에서 NoScript 또는 uBlock Origin을 실행할 때 이 페이지가 왜 이런 식으로 렌더링됩니까(noscript 태그의 내용이 무시됨)?

Firefox에서 NoScript 또는 uBlock Origin을 실행할 때 이 페이지가 왜 이런 식으로 렌더링됩니까(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 태그의 내용이 실행되어야 한다는 것을 이해합니다.

확장 프로그램이 아무것도 차단하지 않는 Chrome 또는 Firefox에서는 bbb ccc의 출력을 얻습니다. 괜찮아, 말이 돼. 'bbb'는 자바스크립트가 허용되어 표시되고, ccc는 자바스크립트 활성화 여부를 표시해 줍니다.

그런 다음 Firefox에 NoScript를 설치하려고 합니다. https://addons.mozilla.org/en-GB/firefox/addon/noscript/

이제 제가 언급한 페이지를 다시 로드하면http://www.zen76171.zen.co.uk/aaa2.html

이것은 보여준다 ccc. 이는 스크립트가 차단되고 있다는 것을 의미하므로 해당 부분은 좋습니다.

그러나 내가 예상하는 출력은 입니다 aaa ccc. 왜냐하면 스크립트가 비활성화되고 스크립트가 비활성화되면 'aaa'가 표시될 것으로 예상하기 때문입니다.

제가 해결한 두 번째 문제도 있습니다. 즉, Firefox에서 NoScript를 비활성화하거나 심지어 '제거'해도 여전히 'ccc'라는 동일한 응답이 표시되고 NoScript를 제거하려면 Firefox를 제거했다가 다시 설치해야 한다는 것입니다. 하지만 지금은 NoScript를 제거하고 싶을 때 그렇게 하면 됩니다.

이 질문은: 왜 'aaa ccc'가 아닌 'ccc'만 표시됩니까?

추가됨

실제로 'uBlock Origin'에는 'ccc'만 표시됩니다. 'uBlock Origin'을 설치하고 스크립트를 비활성화하지 않도록 그대로 두면 'bbb ccc'(괜찮습니다)가 표시됩니다. 반면 페이지에서 스크립트를 비활성화하기 위해 클릭하면 'ccc'가 표시됩니다. 'aaa'가 표시되지 않습니다.

답변1

브라우저 확장 프로그램이 제대로 작동하는 동안 noscript 태그가 부적절하게 사용되었습니다. 그 외에도 페이지 결과가 캐시될 수 있으므로 강제 새로 고침(캐시 재정의로 다시 로드)이 필요할 수 있습니다.

부적절한 사용

그러나 내가 기대하는 출력은 'aaa ccc'입니다. 왜냐하면 스크립트가 비활성화되고 스크립트가 비활성화될 때 'aaa'가 표시될 것으로 예상하기 때문입니다.

아니요, noscript 태그가 부적절하게 사용되었기 때문에 예상되는 출력 'aaa'가 표시되지 않습니다.

W3schools의 HTML noscript 태그사용법에 대한 간결한 설명을 제공합니다.

정의 및 사용법[...]

<noscript> 요소는 <head>와 <body> 모두에서 사용할 수 있습니다.

<head> 요소 내에서 사용되는 경우: <noscript>는 <link>, <style> 및 <meta> 요소만 포함해야 합니다.

HTML 4.01과 HTML5의 차이점

HTML 4.01에서 <noscript> 태그는 <body> 요소 내에서만 사용할 수 있습니다.

HTML5에서는 <noscript> 태그를 <head>와 <body> 내부에서 모두 사용할 수 있습니다.

즉, OP에서 사용하는 noscript 태그는 HTML5 기반으로 유효하지만 이를 따르지 않습니다.HTML 표준. HTML 헤드 요소의 noscript 태그해서는 안 된다"자유 텍스트"를 포함합니다.

페이지 결과

제가 해결한 두 번째 문제도 있습니다. 즉, Firefox에서 NoScript를 비활성화하거나 심지어 '제거'해도 여전히 'ccc'라는 동일한 응답이 표시됩니다. [...]

Firefox를 포함한 대부분의 브라우저는 기본적으로 캐시를 사용하므로 강제 새로 고침이 필요할 수 있습니다. 사용자가 캐시 동작을 다르게 구성하지 않는 한 이는 항상 쉽게 재현될 수 있습니다.

불일치 1: 강제 새로 고침은 Firefox의 경우 Ctrl+ F5또는 Ctrl+ Shift+ 일 수 있는 키보드 단축키를 통해 수행됩니다 . R브라우저 확장의 경우 브라우저를 다시 시작할 때까지 캐시된 효과가 지속될 수 있습니다(사용자 경험은 다를 수 있음).

'uBlock Origin'을 설치하고 스크립트를 비활성화하지 않도록 그대로 두면 'bbb ccc'(괜찮습니다)가 표시됩니다. 반면 페이지에서 스크립트를 비활성화하기 위해 클릭하면 'ccc'가 표시됩니다. 'aaa'가 표시되지 않습니다.

'aaa'가 포함된 noscript 태그는 확장 프로그램에서 무시되거나 생략될 수 있습니다. 'aaa' 사용법이 HTML 표준을 따르지 않기 때문입니다. HTML 헤드 요소의 noscript 태그에는 위에서 언급한 세 가지 요소만 포함되어야 합니다.

불일치 2: uBlock Origin이 활성화되고 "JavaScript 비활성화" 확장 옵션이 선택되어 있어도 Firefox에서 로컬로 HTML 파일을 볼 때 페이지 결과는 'bbb ccc'입니다. 이는 Firefox Quantum의 확장 기능에 대한 권한이 제한되어 있기 때문일 수 있습니다. 즉, 브라우저 확장은 다음을 통해 표시되는 로컬 HTML 페이지에 대한 스크립트를 차단할 수 없습니다.파일 URI 체계(웹 서버가 실행하는 localhost를 통하지 않는 것은 또 다른 문제입니다).

다시 시도하십시오

수정된 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>

그런 다음 uBlock Origin을 사용하여 Firefox에서 HTML을 로드하면 "JavaScript 비활성화" 옵션이 선택 취소(OFF)되거나 선택(ON)됩니다.

  • "JavaScript 비활성화"가 꺼져 있으면 결과는 'bbb ccc'입니다.
  • "JavaScript 비활성화"가 켜져 있으면 결과는 'nnn ccc'가 됩니다. 즉, 'nnn'은 HTML 본문 요소의 noscript 태그에서 표시되고 'ccc'는 HTML 헤드 요소의 noscript 태그에서 색상을 상속합니다.
  • 두 경우 모두 앞에서 설명한 대로 'aaa'가 표시되지 않습니다(표준을 따르지 않음).

불일치 3: 'aaa'는 브라우저 자체 내에서 JavaScript가 비활성화된 경우에만 표시됩니다(Firefox 숨겨진 구성, about:config - "javascript.enabled"가 "false"로 설정됨). 또는 텍스트 전용 브라우저를 사용하여 유사한 결과를 확인하세요. 이는 Firefox Quantum이 제한했던 브라우저 확장 기능에서 제공하는 옵션과 다릅니다.디자인에 의해.

TL;DR스크립트가 비활성화되었을 때 텍스트를 표시하려면 HTML 본문 요소에 noscript 태그를 사용하세요. 브라우저 확장은 HTML 표준에 따라 제대로 작동하지만 설계상 제한됩니다.

관련 정보