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

FontFaceSet check报错:无法解析含数字的字体家族名

字体加载检查问题:含数字的字体家族名触发document.fonts.check报错

我通过Google Font API获取字体列表,返回的字体对象示例如下:

{
    "family" : "Roboto",
    "variants" : ["100", "100italic", "300", "300italic"],
    ...
},
{...}

目前用WebFonts Loader包加载字体,为了避免重复加载,我写了一个检查字体是否已在文档中加载的函数:

const isFontLoaded = (fontName) => {
    // 格式化类似Open+Sans:100,300italic的字体名为Open Sans
    const fontNameFormated = fontName.split(':')[0].replaceAll('+', ' ');

    return document.fonts.check('16px ' + fontNameFormated);
};

执行这个函数时遇到报错:

fonts.js:129 Uncaught DOMException: Failed to execute 'check' on 'FontFaceSet': Could 
not resolve '16px M PLUS Rounded 1c' as a font.

经过排查,只有当字体家族名包含数字时(比如M PLUS Rounded 1c、Exo 2这类)才会触发该错误。如果用正则表达式.replaceAll(/[0-9]/g, '')移除字体名中的所有数字,报错会消失,但document.fonts.check方法会返回false——显然是因为修改后的字体名无效,无法匹配已加载的字体。

测试代码如下:

const fonts = ['Roboto', 'M PLUS Rounded c', 'M PLUS Rounded 1c', 'Exo 2'];

fonts.forEach((font) => {
   console.log(font, document.fonts.check('16px ' + font)); 
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:40:37