Re: src 与 srcset(或是 src-N)的 JS 交互

2013/10/24 Kang-Hao (Kenny) Lu <kanghaol@oupeng.com>

> 这个正解是在 CamanJS 的[1]的地方把 @srcset 也换掉或是设为空字符串,总之
> 就是一个麻烦,而且可能很不好调试的坑。
>

这就是我为什么希望 img.src 的行为应该是总是返回和设定最终显示图片,因为这符合原来库开发者的期望,也就是有最大的backward
compability。


> (2013/10/23 16:15), John Hax wrote:
> > 关于 src 属性,注意 image.src 本来就不是 @src 属性的值,就好像
> > input.value 不是 @value。所以应该让 image.src 永远返回当时真正显示图片
> > 的绝对地址。修改 image.src 也就总是更新图片。
>
> image.src 的返回值不能是真正显示图片的地方主要是隐私权的问题,因为
> srcset 的规范有说浏览器可以透过用户当前的宽带好坏决定要选择哪个图像,所
> 以有可能可以透过读取 .src 知道用户当前的宽带好坏的隐私问题。不过这个部分
> 我想本来就相当有漏洞,不管怎么样把 <img> 放大画到一个 <canvas> 再
> getImageData 出来还是可以知道选到什么东西。
>

考虑隐私是ok的,但是浏览器选择哪个图片可能基于带宽,也可能基于用户的设定(许多手机浏览器有图片质量的设定)。让脚本知道最终选择了哪个并不一定侵犯隐私。况且,服务器这里一定可以track到实际请求了哪个图片,因此隐私的说法并不成立。而且这种结果实际上导致并没有保护用户隐私的同时,还增加了开发者的负担。



>
> 不管怎么样,还是来排序一下吧,你对
>
>   1) image.src 设值总是更新图片,.src 永远返回当时真正显示图片。
>   2) image.src 设值总是更新图片,.src 返回 @src。
>   3) image.src 设值只更动 @src,.src 返回 @src。
>
> 的排序是啥?我是 1 > 2 > 3。我知道你肯定是 1 最大,不过 2 跟 3 的排序如
> 何?我 2 > 3 的理由主要就是上面讲的那个坑。
>

我的选择就是1。2和3都有问题。

2的问题是error-prone。考虑你如何同时更新src/srcset?用setAttribute?还是按照特定顺序(先设src再设srcset)?或者,如果脚本设置了src属性就用src而不考虑@srcset,除非脚本也设置了srcset。但是我怎么知道脚本是否设置了src或srcset?总之,就是大坑一个。

3的问题是导致以前不考虑srcset的库无法用于具有srcset属性的内容。虽然也是问题,但是至少是网站开发者可控的问题。

如果一定要排序,或许是 1 > 3 > 2 。

Received on Thursday, 24 October 2013 03:44:36 UTC