在noscript中使用部分HTML注解来隐藏内容,当javascript被禁用时,保证在任何地方都能工作吗?

xxls0lw8  于 2023-02-14  发布在  Java
关注(0)|答案(1)|浏览(112)
    • bounty将在2天后过期**。回答此问题可获得+50的声誉奖励。allan.simon正在寻找来自声誉良好来源的答案

我希望我的网站可以在基于文本的浏览器上运行,比如lynx
有一些部分的HTML是无用的,在它喜欢的个人资料照片
我尝试了投票率最高的解决方案Is there a HTML opposite to ?
也就是

<head>
    <noscript><style> .jsonly { display: none } </style></noscript>
</head>

但是山猫并没有隐藏它
我发现有效的方法是这样做

<body>
    <noscript> <!--  </noscript>
         <img src="foobar.png">
    <noscript> -->  </noscript>
</body>

这是可行的,而且似乎在我测试过的所有浏览器上都可行,即当javascript被禁用时,图像被隐藏,否则显示。
然而,我想知道这是HTML5解析器中的一个记录行为,还是每个人都以相同的方式实现的一个边缘情况?

wtzytmuj

wtzytmuj1#

是的,它可以保证在每个遵守HTML parsing规则的用户代理中工作。
如果你已经准备好进入这个奇妙的机器...
假设脚本标记已启用,并且我们已经处理了<body>标记。

  • 解析器处于“in body”插入模式,标记化器处于数据状态。
  • 发出<noscript>标记[文本片段链接],
  • 我们输入通用的原始文本解析算法。
  • 从这里,我们将标记器切换到RAWTEXT状态,并进入“文本”插入模式。
  • 标记器看到字符<并切换到RAWTEXT小于号状态。
  • 它找到一个!字符,并返回到RAWTEXT状态,同时将该字符发送到解析器,解析器只插入该字符。
  • 它继续以相同的方式处理输入,直到找到下一个<字符。
  • 这一次,它后面跟有/字符,因此进入RAWTEXT结束标记打开状态。
  • 然后下一个序列是ASCII alpha,它进入RAWTEXT结束标记名状态。
  • 它消耗所有noscript并找到>字符。
  • 我们当前的结束标记(</noscript>)是一个合适的结束标记标记。
  • 令牌化器切换回数据状态并发出当前结束标记。
  • 解析器(仍处于“文本”插入模式)[文本片段链接]经过当前节点,并切换回“在正文中”插入模式。
  • 从那里开始,它将正常处理其余的标记,生成一个<img>自结束标记及其所有属性,直到遇到下一个<noscript>标记,并将-->序列作为文本推入其中。

如果脚本标记被禁用,

  • 当遇到第一个<noscript>标记时,我们只需要在其中插入一个ordinary元素。
  • 我们仍然处于“in body”插入模式,标记化器仍然处于数据状态。
  • <字符将标记器引导到标记打开状态。
  • !一个,设置为标记声明状态。
  • 和接下来的两个--,设置为注解状态。
  • 从这里到下一个-->序列的所有内容都是注解标记的一部分,注解标记将被发送到解析器,因此被视为文本。
  • 解析器插入注解
  • 然后获取结束标记</noscript>并插入当前节点,其中包含注解。

相关问题