2026-10-25 08:37:33
这段代码实现了移动端H5开发中针对WebP格式图片的兼容性处理,核心逻辑是根据Android系统版本决定是否使用WebP格式。以下是对代码的详细解析和优化建议:
代码解析版本检测函数 checkAndroidVersion():
通过正则表达式 /Androids*(d+.?d?)/i 从 navigator.userAgent 中提取Android版本号
将版本号转换为数字后与4.4比较(KitKat是WebP原生支持的起点)
返回布尔值表示是否为高版本Android
全局变量设置:
window.isAdvanceAndroid = checkAndroidVersion();window.WEBP = isAdvanceAndroid ? 'webp' : 'png';根据检测结果设置图片格式后缀
同时为低版本设备添加 low-version 类名到body
版本号处理缺陷:
当前正则无法处理类似 Android 10 这样的多位数版本
版本号比较存在隐式类型转换(Number("5.1.1") → 5.1)
兼容性扩展性不足:
仅针对Android系统,未考虑iOS或其他系统的WebP支持情况
iOS从iOS 14开始才全面支持WebP
多格式回退方案:
<picture> <source srcset="image.webp" type="image/webp"> <img src="image.png" alt="示例图片"></picture>动态加载检测(更准确):
function canUseWebP() { return new Promise(resolve => { const webP = new Image(); webP.onload = webP.onerror = () => { resolve(webP.height === 2); }; webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA'; });}CSS配合方案:
.low-version .webp-bg { background-image: url('fallback.png');}这段优化后的代码提供了更全面的系统检测和更健壮的版本号处理,同时保持了原有代码的简洁性。实际项目中建议结合特性检测(如Modernizr)和服务器端用户代理分析来实现最佳兼容性方案。