考虑以下示例:
<noscript>
<img class="photo" src="example.png">
</noscript>
如果客户端禁用了Javascript,客户端是否只下载图像文件? (我知道如果在此示例中禁用Javascript,客户端只能看到图像)
我问的原因是因为我一直在外部CSS中使用base64数据URI来处理几个背景图像属性(避免http请求)。我还想通过外部Javascript更新它们的值来使用base64数据URI作为某些img标签的src值(以保留缓存的好处)。
基本上,这一点的重点是避免/限制http请求,所以我想知道我是否可以优雅地降级并且只在Javascript被禁用时才获取图像文件?或者无论是下载图像?
答案 0 :(得分:15)
简答:
不,图片不会在<noscript>
元素
技术答案:
我刚刚在我的个人网站上进行了一些测试,以获取禁用JavaScript的功能,并且遇到了这篇文章...... JavaScript仍然被禁用,顺便说一下。
嗯,在这个网页的最顶层,Stack Overflow有一条警告信息说明:
“Stack Overflow最适合启用JavaScript”
作为那些倾向于在几乎每个网站上“查看来源”的网络极客的类型我看一下(!),该消息的HTML代码如下:
<noscript>
<div id="noscript-warning">Stack Overflow works best with JavaScript enabled<img src="http://example.com/path/to/1x1-pixel.gif" alt="" class="dno"></div>
</noscript>
那里没有太多突破性的东西。但是,我感兴趣的是IMG
元素,它引用了1px xpp的不可见图像。
我假设分析/统计软件必须使用此图片来检测他们有多少用户在没有JavaScript的情况下浏览。如果这个假设 是正确的(并且没有任何其他原因在这里使用我忽略的空白1x1像素图像),那么这基本上将确认以下内容:浏览器<在 JavaScript实际被禁用的情况下,em>不下载NOSCRIPT
元素,除之外的任何内容。 (当然,似乎没有任何复古的'98式布局技术正在进行,我很高兴地说!); - )
(P.S。 - 我希望我不会以任何方式冒犯Stack Exchange网络上的任何人指出这一点!)
答案 1 :(得分:13)
HTML 4.01规范只是说在某些情况下不会呈现noscript
的内容。但是,这表明浏览器不应该在这种情况下根据其内容执行任何GET操作,因为这样的操作将毫无意义并且会降低效率。
HTML5草案更明确,可能反映了实际的浏览器行为。它强调了noscript
element,强调说:“它的工作原理是在启用脚本时基本上'关闭'解析器,以便元素的内容被视为纯文本而不是真实元素” 。 (该注释涉及使用XHTML语法时noscript
不起作用的原因,但它也揭示了它工作时的原理。)
因此,我们可以预期,当启用脚本时,甚至不会解析noscript
的内容(除了识别结束标记)。 Blender的回答似乎证实了这一点,我对Firefox的小实验也是如此:
<img src=foo style="foo: 1">
<noscript>
<img src=bar style="bla: 1">
</noscript>
Firefox启用脚本时,foo
发出了失败的GET请求,但没有请求bar
。此外,它在错误控制台中显示有关错误CSS代码foo: 1
的警告,但没有关于bla: 1
的警告。显然img
标签甚至都没有解析过。
但是,我不知道这个问题与提出的问题有什么关系。我认为您使用img
之外的noscript
元素,并使用data:
网址将所需的初始内容(作为后备版本,即禁用脚本时的最终内容)保留在那里。