[微信小程序]字体文件,字体图标(.ttf,.woff,woff2)等无法显示问题
一. 背景
项目引用了第三方UI框架Vant-weapp,但是前几天Vant的cdn被运营商封禁,导致van-icon无法使用。
有赞官方在Github上给出了在小程序app.wxss上添加以下代码的临时解决方案:
 1 @font-face {
 2   font-weight: normal;
 3   font-family: 'vant-icon-temp';
 4   font-style: normal;
 5   font-display: auto;
 6   src: url('https://img.yzcdn.cn/vant/vant-icon-84f687.woff2') format('woff2'),
 7     url('https://img.yzcdn.cn/vant/vant-icon-84f687.woff') format('woff'),
 8     url('https://img.yzcdn.cn/vant/vant-icon-84f687.ttf') format('truetype');
 9 }
10
11 .van-icon {
12   font-family: 'vant-icon-temp' !important;
13 }
我更新代码后,van-icon无法使用的问题解决了。
但是,终究是使用了第三方的cdn,存在cdn又挂了或者有赞停止维护的风险。
因此,决定将字体图标文件本地化部署(我这边项目要求不高,因为本小程序是给公司内部人员使用,如果是面向外界人员的,建议还是使用专业cdn服务)。
二. 尝试解决
解决方案: 使用上面vant官方提供的代码,把相应的ttf,woff,woff2文件下载下来放到本地服务器,替换相应cdn地址为我自己本地化后地址:

然后调试,无法正常显示,提示以下错误:

.woff2提示404,但是woff文件OK。把链接拿到浏览器上依然不行,怀疑是文件类型问题;
因为后端服务器是IIS的,检查一下,发现不支持.woff2格式文件,在MIME类型中加上:

再调试,不再提示错误,微信开发工具端正常显示。
真机调试,显示出现异常,原本图标的地方显示成了一个个×或空白。
查阅资料,怀疑是因为跨域的问题,因为我的小程序开发跨域的Origin有一个,又不能开放所有的origin,那么到底是哪一个origin,
尝试了一下加入https://weixin.qq.com,结果问题就解决了!万万没想到是微信跨域的问题。。。

至此,问题解决。
另外还有一种本地化的方式是把ttf,woff等字体文件转为base64放在小程序源文件中打包,但是我原本一个20k的ttf转base64后差不多60k,不能接受,所以还是使用了本地服务器部署网络化的方式。
1.
参考链接:
1. 字体文件跨域问题:https://blog.csdn.net/weixin_39015132/article/details/82657681
2. 字体文件base64后本地化: https://www.jianshu.com/p/3f7e7e559098
[微信小程序]字体文件,字体图标(.ttf,.woff,woff2)等无法显示问题的更多相关文章
- 如何在微信小程序中使用字体图标
		微信小程序中,在image标签里,可以在src中引用本地文件,但是background设置背景图或者使用字体图标的时候,却不能引用本地文件,只能用url地址的图片或字体,或者使用base64编码后的格 ... 
- 微信小程序Canvas添加水印字体,通过setGlobalAlpha设置字体透明度。
		微信小程序自带的设置透明度只有setGlobalAlpha,但是CanvasContext.setGlobalAlpha设置透明度,是全局透明,整张图片都透明了.所以直接使用是不行的. 换种思路实现: ... 
- 微信小程序设置全局字体
		微信小程序设置全局css,需要在app.wxss文件中设置page的样式 page { font-family:"PingFangSC-Thin"; font-size:32rpx ... 
- 微信小程序如何引用iconfont图标
		最近在研究微信小程序,自己写demo的时候想要引用巴里巴巴图标库的图标,于是: @font-face { font-family: 'iconfont'; src: url('iconfont.eot ... 
- 微信小程序引用阿里巴巴矢量图标iconfont
		最近在写微信小程序,但是引用图片,导致项目文件太大,所以就想到引用阿里巴巴矢量图标的方法 第一步:下载阿里巴巴矢量图代码: 第二步:将下载下来的文件中iconfont.ttf转换即可.转换地址:htt ... 
- less文件编译成微信小程序wxss文件
		2016年9月21日,微信小程序正式开启内测.在微信生态下,触手可及.用完即走的微信小程序引起广泛关注,刷爆朋友圈子.在这样的火爆氛围中,作为一个前端开发者的我,也悄悄地去尝鲜.在做demo小示例的过 ... 
- 微信小程序wxml文件中调用自定义函数
		想在微信小程序的wxml文件里自如的像vue那样调用自定义的方法,发现并不成功,得利用WXS脚本语言. WXS脚本语言是 WeiXin Script 脚本语言的简称,是JavaScript.JSON. ... 
- 微信小程序 - tabbar动态更换图标以及文字
		大家不喜欢小程序的tabbar原因之一就是它太死板,tabbar一旦在app.json定义以后文字不能改,图标不能改! 我要自制tabbar!!! 其实在微信更新完1.9.0基础调试以后就推出了更新方 ... 
- 在微信小程序中使用阿里图标库Iconfont
		首先想要使用图标,只用上图的五个iconfont相关文件就可以了.(下下来的文件iconfont.wxss开始是.css的后缀,手动改成.wxss就可以在小程序中使用) 然后在app.wxss中引入i ... 
随机推荐
- maven  报错 Failed to execute goal on project ...: Could not resolve dependencies for project ...
			昨天在研究 项目 遇到这样一个问题 可以看到 上面有三个 模块 jeecg-boot-base-common .jeecg-boot-module-system .jeecg-boot-modules ... 
- K-NN(最近邻分类算法 python
			# algorithm:K-NN(最近邻分类算法)# author:Kermit.L# time: 2016-8-7 #======================================== ... 
- NET 5 依赖注入多个服务实现类
			依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来. 服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了 ... 
- python初学者-判断今天是今年的第几天代码
			判断今天是今年的第几天源代码 import time date =time.localtime() year,month,day=date[:3] day_month=[31,28,31,30,31, ... 
- Failed to process, please exclude the tableName or statementId.--Mybatis-Plus
			多租户多个用户间使用同一套程序,但每个用户之间实现数据隔离 方法一:在 Mapper 的自定义方法上添加注解 @SqlParser(filter = true),在查询的时候不需要添加租户信息 @Sq ... 
- mysql中order by优化的那些事儿
			为了测试方便和直观,我们需要先创建一张测试表并插入一些数据: CREATE TABLE `shop` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记 ... 
- Android驱动学习-Eclipse安装与配置
			在ubuntu系统下安装配置Eclipse软件.并且让其支持编译java程序和内核驱动程序. 1. 下载Eclipse软件. 打开官网:http://www.eclipse.org/ 点击 DOWN ... 
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
			2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ... 
- Hadoop3.2.0+Centos7三节点完全分布式安装配置
			一.环境准备 ①准备三台虚拟机,配置静态IP ②先修改主机名(每个节点统一命名规范) vim /etc/hostname master #重启生效 配置DNS每个节点 vim /etc/hosts 1 ... 
- python在线练习
			不管学习那门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从中选择自 ... 
