Javascript 混合程序和事件
我有一个函数,可以加载图像并检查它是否成功加载。(查看浏览器是否支持WebP) 问题是,我必须为此使用onload()和onerror(),这意味着我不能简单地返回一个值 我如何延迟返回,直到事件触发? 这是我的密码:Javascript 混合程序和事件,javascript,events,procedure,Javascript,Events,Procedure,我有一个函数,可以加载图像并检查它是否成功加载。(查看浏览器是否支持WebP) 问题是,我必须为此使用onload()和onerror(),这意味着我不能简单地返回一个值 我如何延迟返回,直到事件触发? 这是我的密码: function start_check_webp(){ var div = document.createElement('div'); div.innerHTML = '<img id = "test_image" src="test_image.webp"&g
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}
}
function start\u check\u webp(){
var div=document.createElement('div');
div.innerHTML='';
webp_测试=第一个孩子;
div.firstChild.onerror=function(){support\u webp=false}
div.firstChild.onload=function(){support\u webp=true}
}
你不能。您需要重新构造代码以处理异步事件。不需要让事件处理程序设置变量,您可以让它们调用一个函数,该函数在支持WebP或其他情况下实际执行某些操作。构建代码,以便在加载映像后运行。您可以通过使用数据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.");
});
好吧这是我的另一个选择,但我更喜欢获得“是\否”值。只是检查一下,如果不使用事件,就无法确定映像加载是否失败,是吗?@snostorm:很遗憾,不是。浏览器需要首先从服务器加载映像,这必然会使其异步。(JavaScript中没有阻塞调用。)