2 回答
TA贡献1804条经验 获得超7个赞
由于没有一个目前尚未发现这是怎么任何规格应该的行为,我们将不得不与它是如何满足并表现。以下是我的测试结果。
| 是可用的图像数据| 在src之后进行onload回调设置
| 设置src后?| 被更改仍然被调用?
------------ + ----------------------------- + ------- ------------------------------
Safari 5 | 是的| 是
------------ + ----------------------------- + ------- ------------------------------
Chrome 8 | **没有**(第1页加载),但是| 是
FireFox 3.6 | 之后是(缓存)|
------------ + ----------------------------- + ------- ------------------------------
IE8 | 是(32kB数据限制)| 是
------------ + ----------------------------- + ------- ------------------------------
IE9b | 是的| **没有**
------------ + ----------------------------- + ------- ------------------------------
综上所述:
您不能假设在设置数据后立即可以使用图像数据-uri; 你必须等待这个onload事件。
由于IE9,您无法onload在设置之后设置处理程序src并期望调用它。
在这些建议“谨慎行事”(从上面的问题)是确保正确的行为的唯一途径。
如果有人能找到讨论这个的规格,我会乐意接受他们的回答。
TA贡献2019条经验 获得超9个赞
在将控制权交还给浏览器的渲染引擎后,测试报告true
在FF 4b9和Chromium 8.0.552.237中。我修改了这些部分:
img.onload = function(){ // put this above img.src = … document.getElementById('onload').innerHTML = 'yes';};img.src = img_src;…window.setTimeout(function () { // put this inside setTimeout document.getElementById('wh').innerHTML = (img.height==img.width) && (img.height==128);}, 0);
更新:是的,我理解这个'答案'更像是一个评论,但只是想指出来。经过测试,我得到了可重复的结果:
没有
setTimeout
,在这两种浏览器中,我false
第一次打开页面时true
才会遇到F5。明确清除缓存false
后,重新加载后再说一遍。随着
setTimeout
宽度/高度测试总是evualuatestrue
。
在这两种情况下,只有在重新加载页面后,图像才会第一次显示。
添加回答
举报