uni-app 安卓端加载字体失败

uni-app 安卓端加载字体失败

示例代码:

<text class="van-icon van-icon-arrow"></text>  
.van-icon {  
        font-family: "vant-icon" !important;  
    }  
@font-face {  
        font-family: "vant-icon";  
        src: url('https://at.alicdn.com/t/c/font_2553510_kfwma2yq1rs.woff2?t=1694918397022') format('woff'), url('https://at.alicdn.com/t/c/font_2553510_kfwma2yq1rs.woff?t=1694918397022') format('woff2');  
    }  

.van-icon-arrow:before {  
        content: "\e660"  
    }

操作步骤:

  • 将vant ui的图标设为字体

预期结果:

  • 在安卓端展示图标

实际结果:

  • web端可以,安卓端不行

bug描述:

web端能正常加载出图标,安卓端加载不出来

@font-face {  
        font-family: "vant-icon";  
        src: url('https://at.alicdn.com/t/c/font_2553510_kfwma2yq1rs.woff2?t=1694918397022') format('woff'), url('https://at.alicdn.com/t/c/font_2553510_kfwma2yq1rs.woff?t=1694918397022') format('woff2');  
    }  

.van-icon-arrow:before {  
        content: "\e660"  
    }

图像


更多关于uni-app 安卓端加载字体失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

文档有说明,Android端目前不支持woff2,https://doc.dcloud.net.cn/uni-app-x/css/font-family.html

更多关于uni-app 安卓端加载字体失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 开发中,如果在安卓端加载字体失败,可能是由于多种原因导致的。以下是一些常见的问题和解决方案:


1. 字体文件路径问题

确保字体文件的路径正确且可以被访问。在 uni-app 中,字体文件通常放在 static 目录下,然后在 css 中通过相对路径引用。

[@font-face](/user/font-face) {
    font-family: 'CustomFont';
    src: url('/static/fonts/CustomFont.ttf') format('truetype');
}
  • 注意:路径前需要加 /,表示从根目录开始。
  • 检查:确保字体文件存在,且路径正确。

2. 字体文件格式问题

安卓设备支持的字体格式通常是 .ttf.otf。确保字体文件的格式正确,并且文件没有损坏。

  • 验证:可以尝试在其他平台(如浏览器或 iOS)上加载字体,检查是否是字体文件本身的问题。

3. 字体文件大小问题

如果字体文件过大,安卓设备可能无法正常加载。可以尝试压缩字体文件,或者使用 woffwoff2 格式(需要确保设备支持)。


4. 跨域问题(仅限网络字体)

如果字体文件是从远程服务器加载的,确保服务器配置了正确的跨域头(CORS),允许字体文件的加载。

Access-Control-Allow-Origin: *

5. WebView 缓存问题

安卓设备的 WebView 可能会有缓存问题,导致字体加载失败。可以尝试以下方法解决:

  • 清除缓存:在应用中手动清除缓存。
  • 禁用缓存:在代码中禁用 WebView 缓存。
// 在页面生命周期中禁用缓存
onLoad() {
    uni.setStorageSync('clearCache', true);
}

6. 字体加载超时问题

如果字体文件加载时间过长,可能会导致加载失败。可以尝试以下方法:

  • 优化字体文件:减少字体文件大小。
  • 异步加载字体:使用 JavaScript 动态加载字体。
const font = new FontFace('CustomFont', 'url(/static/fonts/CustomFont.ttf)');
font.load().then(() => {
    document.fonts.add(font);
    console.log('字体加载成功');
}).catch(err => {
    console.error('字体加载失败', err);
});

7. 安卓系统限制

某些安卓设备或系统版本可能对字体加载有特殊限制。可以尝试以下方法:

  • 测试不同设备:检查是否是特定设备或系统版本的问题。
  • 使用系统默认字体:作为备选方案,避免自定义字体。

8. 调试工具

使用调试工具检查字体加载问题:

  • Chrome DevTools:通过远程调试安卓 WebView,检查网络请求和错误信息。
  • 日志输出:在代码中添加日志,检查字体加载的状态。

示例代码

以下是一个完整的示例:

/* 在 App.vue 或页面样式中定义字体 */
[@font-face](/user/font-face) {
    font-family: 'CustomFont';
    src: url('/static/fonts/CustomFont.ttf') format('truetype');
}

body {
    font-family: 'CustomFont', sans-serif;
}
回到顶部