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
相关产品推荐
相关产品推荐

