2011-04-07 95 views
0

我有一个加载图像,并检查它是否成功加载的功能。 (要查看浏览器是否支持WebP的)混合程序和事件

的问题是,我必须使用的onload()和的onerror()对于这一点,这意味着我不能简单地返回一个值。

我如何可以延迟返回,直到事件触发?

这里是我的代码:

function start_check_webp(){ 
    var div = document.createElement('div'); 
    div.innerHTML = '<img id = "test_image" src="test_image.webp">'; 
    webp_test = div.firstChild; 
    div.firstChild.onerror = function(){support_webp = false} 
    div.firstChild.onload = function(){support_webp = true} 
} 

回答

1

你不能。您需要重构代码以处理异步事件。您可以让它们调用一个函数,如果支持WebP或者其他方式,它实际上会做些什么,而不是让事件处理函数设置变量。

+0

好吧......这是我的另一种选择,但我更喜欢得到yes \ no值。只是为了检查,没有任何方法可以查明图片加载是否在没有使用事件的情况下失败,是吗? – snostorm 2011-04-07 01:51:17

+0

@snostorm:不幸的是没有。浏览器需要首先从服务器加载镜像,这必然会使镜像异步。 (JavaScript中没有阻止调用。) – casablanca 2011-04-07 01:55:49

+0

好的,谢谢。 – snostorm 2011-04-07 01:57:05

0

结构代码,使其运行一次加载图像。您可以通过使用数据URI而不是外部图像来加快处理速度。例如:

function testWepP() { 
    var webP = new Image();  
    webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIAL' + 
    'mk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA'; 
    webP.onload = webP.onerror = function() { 
    callback(webP.height === 2);  
    }; 
}; 

testWebP(function(supported) { 
    console.log((supported) ? "webP supported!" : "webP not supported."); 
});