一. 背景

项目引用了第三方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)等无法显示问题的更多相关文章

  1. 如何在微信小程序中使用字体图标

    微信小程序中,在image标签里,可以在src中引用本地文件,但是background设置背景图或者使用字体图标的时候,却不能引用本地文件,只能用url地址的图片或字体,或者使用base64编码后的格 ...

  2. 微信小程序Canvas添加水印字体,通过setGlobalAlpha设置字体透明度。

    微信小程序自带的设置透明度只有setGlobalAlpha,但是CanvasContext.setGlobalAlpha设置透明度,是全局透明,整张图片都透明了.所以直接使用是不行的. 换种思路实现: ...

  3. 微信小程序设置全局字体

    微信小程序设置全局css,需要在app.wxss文件中设置page的样式 page { font-family:"PingFangSC-Thin"; font-size:32rpx ...

  4. 微信小程序如何引用iconfont图标

    最近在研究微信小程序,自己写demo的时候想要引用巴里巴巴图标库的图标,于是: @font-face { font-family: 'iconfont'; src: url('iconfont.eot ...

  5. 微信小程序引用阿里巴巴矢量图标iconfont

    最近在写微信小程序,但是引用图片,导致项目文件太大,所以就想到引用阿里巴巴矢量图标的方法 第一步:下载阿里巴巴矢量图代码: 第二步:将下载下来的文件中iconfont.ttf转换即可.转换地址:htt ...

  6. less文件编译成微信小程序wxss文件

    2016年9月21日,微信小程序正式开启内测.在微信生态下,触手可及.用完即走的微信小程序引起广泛关注,刷爆朋友圈子.在这样的火爆氛围中,作为一个前端开发者的我,也悄悄地去尝鲜.在做demo小示例的过 ...

  7. 微信小程序wxml文件中调用自定义函数

    想在微信小程序的wxml文件里自如的像vue那样调用自定义的方法,发现并不成功,得利用WXS脚本语言. WXS脚本语言是 WeiXin Script 脚本语言的简称,是JavaScript.JSON. ...

  8. 微信小程序 - tabbar动态更换图标以及文字

    大家不喜欢小程序的tabbar原因之一就是它太死板,tabbar一旦在app.json定义以后文字不能改,图标不能改! 我要自制tabbar!!! 其实在微信更新完1.9.0基础调试以后就推出了更新方 ...

  9. 在微信小程序中使用阿里图标库Iconfont

    首先想要使用图标,只用上图的五个iconfont相关文件就可以了.(下下来的文件iconfont.wxss开始是.css的后缀,手动改成.wxss就可以在小程序中使用) 然后在app.wxss中引入i ...

随机推荐

  1. 单身狗福利!利用java实现每天给对象发情话,脱单指日可待!

    引言 最近看到一篇用js代码实现表白的文章,深有感触. 然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞 实现思路: 使用HttpClient远程获取彩虹屁生成 ...

  2. phaser3入门教程-从零开始开发一个打砖块游戏

    项目代码 项目代码 体验一下 空格开始,左右箭头控制移动 体验一下 Phaser简介 Phaser是一个HTML5游戏框架.它使用了许多HTML5 API,例如Canvas,WebGL,Audio,G ...

  3. 读取xlsx文件的内容输入到xls文件中

    package com.cn.peitest.excel; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  4. idea中快捷键换成熟悉的celipse中快捷键

    打开idea,找到菜单栏的file,点击打开,找到settings,打开   用key做关键词搜索keymap   找到之后点击打开,右侧就会显示快捷键界面,可以点击查看每一项 4 默认为defaul ...

  5. Linux嵌入式学习-mount命令+nfs挂载失败原因【转】

    NFS 挂载失败原因[待搜集] 1.挂载时若出现mount.nfs: Input/output error 解决:在客户端也需启动portmap服务 service portmap status[查看 ...

  6. MySQL中的排序

    在编写SQL 语句时常常会用到 order by 进行排序,那么排序过程是什么样的?为什么有些排序执行比较快,有些排序执行很慢?又该如何去优化? 索引排序 索引排序指的是在通过索引查询时就完成了排序, ...

  7. 高效扩展工具让 VS Code 如虎添翼

    Codelf 变量命名神器 Star:10688 https://github.com/unbug/codelf 新建项目,变量,类,方法,接口都需要命名,一个好的命名可以一眼看出这个地方的功能,Co ...

  8. ES6中class的使用+继承

    一.Class 介绍+基本语法(1).介绍通过class关键字,可以定义类.基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的 ...

  9. 如何在 Linux 系统查询机器最近重启时间

    如何在 Linux 系统查询机器最近重启时间 在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到 ...

  10. 云计算之4---Cockpit

    cockpit是一个简单可用的监控工具,你可以添加多个主机进行监控,上限是20台 .也可以使用cockpit来管理虚拟机/容器,也可以安装其他组件开启更多功能. 注意:cockpit没有告警功能,不适 ...