本文概述
- 标准JavaScript
- ES2017
- 冗余?我想是的。
验证Plain JavaScript是否支持webp格式的逻辑如下:首先需要一个base64字符串, 其中包含一些webp格式的图像, 在这种情况下, 我们将使用此格式已经有1px的白色图像, 则需要将该字符串转换为Blob。有多种方法可以将base64字符串转换为blob, 但是最简单的方法之一是使用浏览器中提供的fetch API, 然后从中调用blob方法。这已经是一个斑点, 可以由浏览器的createImageBitmap函数解释。 createImageBitmap方法在窗口和辅助程序中都存在于全局变量中。它接受各种不同的图像源, 并返回解析为ImageBitmap的Promise。
在本文中, 我们将与你分享2种方法, 这些方法将帮助你验证浏览器是否支持具有不同JavaScript版本的这种格式。
标准JavaScript将典型方法与随处可见的回调一起使用(只要支持fetch API)
function WebpIsSupported(callback){// If the browser doesn't has the method createImageBitmap, you can't display webp formatif(!window.createImageBitmap){callback(false);
return;
}// Base64 representation of a white point imagevar webpdata = 'data:image/webp;
base64, UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoCAAEAAQAcJaQAA3AA/v3AgAA=';
// Retrieve the Image in Blob Formatfetch(webpdata).then(function(response){return response.blob();
}).then(function(blob){// If the createImageBitmap method succeeds, return true, otherwise falsecreateImageBitmap(blob).then(function(){callback(true);
}, function(){callback(false);
});
});
}
然后, 你可以使用如下方法:
// You can run the code like !WebpIsSupported(function(isSupported){if(isSupported){console.log("Supported");
}else{console.log("Not supported");
}});
ES2017使用ECMAScript 2017, 你可以使用异步函数而不是回调来简化所有先前的代码:
async function WebpIsSupported() {// If the browser doesn't has the method createImageBitmap, you can't display webp formatif (!self.createImageBitmap) return false;
// Base64 representation of a white point imageconst webpData = 'data:image/webp;
base64, UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoCAAEAAQAcJaQAA3AA/v3AgAA=';
// Retrieve the Image in Blob Formatconst blob = await fetch(webpData).then(r =>
r.blob());
// If the createImageBitmap method succeeds, return true, otherwise falsereturn createImageBitmap(blob).then(() =>
true, () =>
false);
}
【如何使用JavaScript检测浏览器是否支持Webp图像格式】你可以测试是否支持该格式, 例如:
// You can run your code like(async () =>
{if(await WebpIsSupported()) {console.log('Is Supported');
} else {console.log("Isn't supported");
}})();
冗余?我想是的。尽管到目前为止, 除了优化应用程序上的图像加载之外, 我们还没有一个真正的用例, 但此实现更具参考价值, 因为它可以提供一种如何轻松检查浏览器是否支持该格式的想法。初始代码段(标准JavaScript)上最有趣的是, 如果你将代码段包含在应用程序中并且可以在较旧的浏览器上运行, 则还需要检查是否支持fetch API和转换该代码段的其他方法。 base 64字符串转换为blob, 然后将该blob与createImageBitmap方法一起使用。检查fetch API是否受支持或对其使用polyfill将导致另一个依赖关系, 即对Promises的支持。
编码愉快!
推荐阅读
- 如何在Ubuntu 16.04中使用OCRmyPDF使基于图像的PDF(图像到文本)可以选择和搜索
- 如何通过语音命令即时切换Artyom.js的语言
- 如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN/TURN服务器
- 在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)
- Dockerfile构建LNMP分离环境部署wordpress
- linux搭建基于LNMP的wordpress博客
- 使用Docker swarm构建wordpress集群
- 如何为 RHEV-M 安装配置一个离线的软件存储仓库(REPOSITORY)
- Apache POI处理excel文档