如何检查图像是否缓存在js中?

loo*_*ing 7 javascript image browser-cache

当我参加面试时,我被问到这个问题,我不知道如何回答.

你知道这个问题的关键点吗?

Ble*_*der 17

检查对象的complete属性Image是否为true:

function is_cached(src) {
    var image = new Image();
    image.src = src;

    return image.complete;
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作(虽然它会加载图像,如果它不在缓存中,这可能不是你想要的):

> is_cached('http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=3')
false
> is_cached('http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=3')
true
Run Code Online (Sandbox Code Playgroud)

  • 这不会检查缓存。它检查 DOM,您可以通过打开两个选项卡来验证这一点,在一个选项卡中“检查”(假)在同一个选项卡中再次“检查”(真)然后转到第二个选项卡并“检查”(假),即使它应该被缓存。 (3认同)

Sud*_*oti 6

你可以检查如下:

function is_cached(img_url){
    var imgEle = document.createElement("img");
    imgEle.src = img_url;
    return imgEle.complete || (imgEle.width+imgEle.height) > 0;
}

//and check, returns true or false depending on cached or not
is_cached("http://www.somesite.com/some_image.jpg");
Run Code Online (Sandbox Code Playgroud)

  • 为什么是`|| (imgEle.width+imgEle.height) > 0;` 有必要吗? (2认同)