noscript标签在不同浏览器中的处理方式

how noscript tag treated in different browsers

本文关键字:处理 方式 浏览器 标签 noscript      更新时间:2023-09-26

我在任何地方都找不到关于这个的解释。

我只是想知道什么浏览器生成的noscript标签内的数据,如果 JS是启用的。

例如

:

根据HTML5规范,允许在head标签内使用noscript标签。

<head>
<noscript>
<link rel="stylesheet" href="basic.css" type="text/css" media="all" />
</noscript>
</head>

我问这个问题的原因是,我担心一些浏览器可能会把noscript标签当作文本(如果JS启用),因此它会加载/添加不必要的数据。

那么,浏览器实际上是如何处理noscript标签的呢?

谢谢。

HTML元素定义了一段要插入的HTML如果页面上的脚本类型不受支持,或者脚本是当前在浏览器中已关闭。源。

如果启用了脚本,则noscript元素不代表任何东西如果禁用脚本,则表示其子节点。它是用来向支持脚本和的用户代理提供不同的标记那些不支持脚本,通过影响文档的方式解析。源。

noscript标签在浏览器中得到很好的支持,据我所知,它没有偏离标准规范。

顺便说一下,如果你真的需要确保它在不同浏览器中的行为,你可以使用基于web的浏览器测试工具,如https://www.browserstack.com,这将加快你的测试过程

要理解这一点,请记住HTML5规范描述了两种语法,当页面作为text/html提供时的(常规)HTML语法和当页面作为application/xhtml+xml提供时的XHTML语法。浏览器根据使用的语法做不同的事情。

我希望您感兴趣的是text/html语法,因此,规范在第8节- HTML语法中描述了发生的事情。

然后我们需要遵循解析器算法的树构建阶段,对于您的示例,<noscript>元素位于head部分,请查看"in head"插入模式。从那里向下搜索,你会发现A start tag whose tag name is "noscript, if the scripting flag is enabled链接到通用的原始文本元素解析算法..

这将标记器置于RAWTEXT状态,这意味着所有字符只是通过传递,直到找到</noscript>标记(即实体引用未解析),插入模式切换为"文本"插入模式。

这只是将每个字符添加到文本节点,直到插入模式切换回以前的模式时找到</noscript>标记,例如"in head"插入模式,然后完成<noscript>元素的解析。

对于您的示例,结果是<link rel="stylesheet" href="basic.css" type="text/css" media="all" />将是文本节点的未解释内容,作为<noscript>元素的唯一子元素。