Re: img.src = null(原:src 与 srcset(或是 src-N)的 JS 交互)

于 2013/10/27 21:57, John Hax 写道:
> img.src = '' 的行为在现在浏览器里貌似是:
>
> img.src返回当前网页的绝对地址,但是不发请求,当然也没有图片显示。应该 
> 说是比较诡异的。
>
>
src为空字符串的时候,首先英文没有http:或https:的schema头,而判定为相对引 
用,而空字符串在于当前页地址进行路径计算的时 候没有做任何改变,因此返回 
网页地址是正确的,不发送请求也是正确的,因为这个地址的东西正在显示。
>
> 我倒是没有注意到按照现在的规范 img.src = null 实际成了 img.src = 'null'。
> 我认为规范应该改变这个行为。反正应该在现实中没有人依赖 img.src = null 
> 的行为。
>
>
这个行为在Javascript中也是正确的,因为在js中真正为空的是undefined,而不 
是null,用if就可以明显的看出来。js中 null表示一个特殊的对象,那么在转换 
为字符串的时候会直接调用toString()方法,null本身的描述就是"null",所以这 
个赋值 行为没错,通常这么写的都是刚从别的语言转过来的新手。
>
>
>
> 2013/10/26 Kang-Hao (Kenny) Lu <kanghaol@oupeng.com 
> <mailto:kanghaol@oupeng.com>>
>
>     (2013/10/25 21:52), John Hax wrote:
>     > 1的方法是把img.src明确为最终显示的图片,也就是排除了同时设置
>     srcset/src
>     > 的case。也就是说如果手动设置了src,就覆盖了srcset的设置。除非你再
>     > img.src = null(当前规范未对这样应该执行的行为做出明确规定,浏览
>     器一般
>     > 是忽略。但如果采取1,则取消对srcset的覆盖是比较合理的行为,且此
>     行为与
>     > 浏览器当前行为是兼容的)。
>
>     当前规范们有对 "img.src = null" 对这样应该执行的行为做出明确规定,
>     请参考
>     WebIDL 属性设值算法[1]与 ECMAScript 值转成 IDL DOMString 值的算法
>     [2]。这
>     里的关键是
>
>     interface HTMLImageElement : HTMLElement {
>                ...
>                attribute DOMString src;
>                ...
>     }
>
>     的 attribute 前面有没有 [TreatNullAs=EmptyString] 标签。没有就是
>     null 会
>     被转成 "null"。
>
>     当然,有明确规定跟合不合实现或是合不合理是两回事,src 属性该不该有
>     [TreatNullAs=EmptyString] 也有争过[3]。目前是
>
>       规范 = 新 Firefox = IE ≠ 旧 Firefox = WebKit
>
>     的样子。
>
>     [1] http://www.w3.org/html/ig/zh/wiki/WebIDL#dfn-attribute-setter
>     [2]
>     http://dev.w3.org/2006/webapi/WebIDL/#dfn-convert-idl-to-ecmascript-value
>     [3] https://www.w3.org/Bugs/Public/show_bug.cgi?id=21668
>
>     (2013/10/25 23:39), Kang-Hao (Kenny) Lu wrote:
>     >    HTML                       <img src=xxx srcset=xxx />
>     > +  不支持 srcset 的 JS 库 1   设置了 .src
>     > +  支持 srcset 的 JS 库 2     设置了 .srcset
>     >
>     > 那这个时候 JS 库 2 会不起作用。支持 .srcset 的 JS 库的完整正确写法是
>     >
>     >   img.src = null;†
>     >   img.srcset = 新值;
>
>     所以这里的正确写法应该是
>
>       img.src = "";
>       img.srcset = 新值;
>
>     。不过我换个方向问,应该很多人都有注意到在 DOM 里 null 大多会变成
>     "null",img.src 的特别之处在哪?
>
>
>     话说,我感觉多了解 WebIDL 对很多人看规范都很有帮助,比如之前
>     [ArrayClass] 的讨论[4]或许我们应该优先翻译 WebIDL?
>
>     [4]
>     http://lists.w3.org/Archives/Public/public-html-ig-zh/2012Jun/thread#msg18
>
>     以上
>
>     Kenny
>     --
>     Web Specialist, Opera Sphinx Team, Oupeng Browser, Beijing
>     Try Sphinx: http://sphinx.oupeng.com/
>
>

-- 
Regards

Hawkeyes Wind

Received on Sunday, 27 October 2013 15:51:41 UTC