bar*_*lop 4 html javascript noscript
在 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>
Run Code Online (Sandbox Code Playgroud)
我知道如果浏览器没有运行 javascript,那么 noscript 标签的内容应该运行。
在 chrome 或 firefox 中,没有扩展阻止任何东西,我得到bbb ccc. 很好,有道理。'bbb' 显示是因为允许使用 javascript,而ccc显示是因为它会显示是否启用了 javascript。
如果我安装了例如 uBlock origin 扩展,或者如果在 Firefox 中我安装了 NoScript 扩展(注意 - 该扩展的名称与 noscript 标签巧合),那么当我重新加载我提到的页面时
http://www.zen76171.zen.co.uk/aaa2.html
它显示ccc. 这向我表明脚本被阻止了(因为它没有显示bbb,所以那部分(不显示bbb,很好。
但是我期望的输出是aaa ccc,因为我希望在禁用脚本和禁用脚本时显示 'aaa'。
还有一个我要解决的次要问题,那就是如果我从 Firefox 中禁用或什至“删除”NoScript 扩展,那么我仍然得到与“ccc”相同的响应,我必须卸载并重新安装 Firefox 以删除NoScript 扩展。但是现在当我想删除 NoScript 扩展时就可以了。uBlock Origin 没有这样的问题(不需要重新安装浏览器来删除它!)。因此,如果有人试图重现此问题,那么我建议他们要么使用他们拥有的脚本拦截器,要么像我一样使用 uBlock Origin。
为什么它只显示'ccc'而不显示'aaa ccc'(当脚本被阻止时)?
uBlock Origin 或 NoScript 扩展就是这种情况。所以,它似乎与任何禁用脚本的东西有关。
那么,为什么aaa从来没有显示过。我认为它应该在禁用脚本时显示。
它仅适用于,如果<noscript>是在 中body,而不是head。它的行为是绝对正确的。想想在里面设置任何内容<head>:它不会被显示。
不起作用:<noscript>在<head>
<!doctype html>
<html>
<head>
<noscript>aaa</noscript>
<script>document.write("bbb")</script>
</head>
<body>
ccc
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在此代码笔上在 Windows 10 Pro 上使用最新的 Chrome 和uBlock Origin扩展进行测试
将工作:<noscript>在<body>
<!doctype html>
<html>
<head>
</head>
<body>
<noscript>aaa</noscript>
<script>document.write("bbb")</script>
ccc
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在此代码笔上在 Windows 10 Pro 上使用最新的 Chrome 和uBlock Origin扩展进行测试
在MDN <noscript> 页面上它说(强调我的)
允许的内容:当脚本被禁用并且它是<head> 元素的后代时:以任何顺序,零个或多个<link>元素、零个或多个<style>元素以及零个或多个<meta>元素。当脚本被禁用并且它不是 <head> 元素的后代时:任何透明内容,但没有 <noscript> 元素必须在其后代中。否则:流动内容或短语内容。
所以:如果在 head 中,只允许链接、元和样式