如果禁用Javascript,是否只下载noscript标记内的图像?

时间:2013-02-05 23:48:19

标签: html http background-image image noscript

考虑以下示例:

<noscript>
    <img class="photo" src="example.png">
</noscript>

如果客户端禁用了Javascript,客户端是否只下载图像文件? (我知道如果在此示例中禁用Javascript,客户端只能看到图像)

我问的原因是因为我一直在外部CSS中使用base64数据URI来处理几个背景图像属性(避免http请求)。我还想通过外部Javascript更新它们的值来使用base64数据URI作为某些img标签的src值(以保留缓存的好处)。

基本上,这一点的重点是避免/限制http请求,所以我想知道我是否可以优雅地降级并且只在Javascript被禁用时才获取图像文件?或者无论是下载图像?

2 个答案:

答案 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:网址将所需的初始内容(作为后备版本,即禁用脚本时的最终内容)保留在那里。