Javascript 为什么图像';完成';属性始终返回true,即使没有src标记?

Javascript 为什么图像';完成';属性始终返回true,即使没有src标记?,javascript,html,image,internet-explorer-11,Javascript,Html,Image,Internet Explorer 11,我只是写信 document.createElement("img").complete;//To check whether image is loaded or not 在Firefox中,它返回true。在IE中,它返回false 或 在html页面中,只需创建一个图像,如下所示: <!-- IMG tag with no SRC attribute. --> <img id="noSrcImg" /> FF为真,IE为假 有人能解释为什么会有这种不一致的行为

我只是写信

document.createElement("img").complete;//To check whether image is loaded or not
在Firefox中,它返回true。在IE中,它返回false

在html页面中,只需创建一个图像,如下所示:

 <!-- IMG tag with no SRC attribute. -->
<img id="noSrcImg" />
FF为真,IE为假

有人能解释为什么会有这种不一致的行为吗

有没有其他更好的方法来检查DOM中是否加载了图像


我也尝试了readyState属性,但它不适用于IE11。

像任何href一样清空img src,因为相对URL指的是基本URL,即文档的URL。 @mplungjan发布了一个很好的解决方案,可以实际检查它是否被加载以及何时被加载

请尝试加载

另外,请确保在分配src之前定义了事件处理程序-在速度非常快的网络上,如果没有首先定义src,则src可能会在事件处理程序之前加载

var im = document.createElement("img");
im.onload=function() { alert(this.src+' loaded')} // assign before src
im.onerror=function() { alert(this.src+' failed')} // if necessary
im.src="someimage.jpg";
这是IE中的一个错误:

如果以下任一条件为真,IDL属性
complete
必须返回真:

  • src
    属性被省略
  • 获取资源后由网络任务源排队的最后一个任务已排队
  • img
    元素完全可用
  • img
    元素已损坏
否则,该属性必须返回false


了解图像状态的最佳方法是处理
load
error
事件。如果出于任何原因,无法确定图像是否已成功加载,请检查
img.complete&&img.naturalWidth>0
。如果为true,则表示映像已成功加载。否则,图像要么仍在加载,要么加载失败-由于IE的不一致性,很难判断是哪一个。

如果浏览器已完成图像获取,则返回一个布尔值,无论是否成功。如果图像没有src值,它也会显示true。

使用加载/错误事件验证是否正确加载了图像此处有一些解释。得到第二个问题的答案,谢谢@mplugjan,但仍在寻找我的第一个问题:为什么会有这种行为?@ThalisK
im.onerror=function(){alert(this.src+'failed')}
@mplungjan对不起,我删除了评论。它是:“值得一提的是,警报将显示图像是否正确加载,即如果
im.src
无效,则不会触发
onload
事件。”。
var im = document.createElement("img");
im.onload=function() { alert(this.src+' loaded')} // assign before src
im.onerror=function() { alert(this.src+' failed')} // if necessary
im.src="someimage.jpg";