You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FontFaceSet#check()检测字体加载始终返回true,是否用法有误?

问题分析与解决方法

你遇到的问题并非API使用错误,而是FontFaceSet#check()的设计逻辑导致的:

核心原因

document.fonts.check()的作用是检查是否存在任意可用字体能够匹配你传入的字体规则,而非严格验证某个特定字体是否已加载。当你传入一个不存在的字体名时,浏览器会自动触发字体回退机制,使用系统默认的备用字体(如Arial、宋体等)来匹配,因此该方法会判定存在可用字体,始终返回true。

正确检测方式

要严格验证目标字体是否存在,需要构造一个不会触发回退的字体匹配规则:在目标字体后添加一个肯定不存在的字体族(比如随机无意义字符串),确保只有当目标字体存在时,才能找到匹配项。示例代码:

// 替换YourTargetFont为你要检测的字体名
document.fonts.check("1px 'YourTargetFont', 'RandomNonExistentFont_789'");
  • 如果目标字体已加载/存在,方法返回true;
  • 如果目标字体不存在,浏览器找不到任何可匹配的字体,返回false。

额外优化方案

如果需要更精准地处理字体加载状态,可以结合FontFaceSet.load()方法,它会返回Promise,能明确感知字体加载成功或失败:

document.fonts.load("1px 'YourTargetFont'")
  .then(() => console.log("字体已成功加载"))
  .catch(() => console.log("字体不存在或加载失败"));

内容的提问来源于stack exchange,提问作者Yulin He

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:14:52