FontFaceSet: check() 方法

Baseline 2023
新推出

自 ⁨2023 年 12 月⁩起,此功能可在最新的设备和浏览器版本上使用。此功能可能无法在较旧的设备或浏览器上使用。

注意:此功能在 Web Workers 中可用。

FontFaceSet 对象的 check() 方法会在您可以使用给定的字体描述来渲染文本,而无需尝试使用此 FontFaceSet 中尚未完全加载的任何字体时,返回 true。这意味着您可以使用该字体描述而不会引起 字体切换

注意: check() 方法并非用于验证是否可以渲染特定的字体样式,或者特定字体是否已完全加载。相反,如果给定的字体描述所指定的文本无需引起字体切换即可渲染,则该方法返回 true。这意味着,即使请求的字体不可用或未完全加载,该方法仍可能返回 true。此行为有助于避免与字体切换相关的视觉问题,但如果您试图确认特定字体的可用性,可能会产生误导。

语法

js
check(font)
check(font, text)

参数

font

使用 CSS font 属性语法的字体描述,例如 "italic bold 16px Roboto"

文本

将字体限制在 Unicode 范围至少包含文本中任一字符的字体。此操作 不会检查单个字形覆盖

返回值

一个 Boolean 值。如果使用给定的字体描述渲染文本不会尝试使用此 FontFaceSet 中尚未完全加载的任何字体,则返回 true

这意味着此 FontFaceSet 中与给定的字体描述匹配的所有字体,其 status 属性都设置为 "loaded"

否则,该函数返回 false

示例

在以下示例中,我们创建一个新的 FontFace 并将其添加到 FontFaceSet

js
const font = new FontFace("molot", 'url("/shared-assets/fonts/molot.woff2")', {
  style: "normal",
  weight: "400",
  stretch: "condensed",
});

document.fonts.add(font);

未加载的字体

字体尚未加载,因此 check("12px molot") 返回 false,表明如果我们尝试使用给定的字体描述,我们将触发字体加载

js
console.log(document.fonts.check("12px molot"));
// false: the matching font is in the set, but is not yet loaded

系统字体

如果我们仅在 check() 的参数中指定系统字体,它将返回 true,因为我们可以使用系统字体而无需加载该集合中的任何字体

js
console.log(document.fonts.check("12px Courier"));
// true: the matching font is a system font

不存在的字体

如果我们指定一个不在 FontFaceSet 中也不是系统字体的字体,check() 返回 true,因为在这种情况下我们不会依赖该集合中的任何字体

js
console.log(document.fonts.check("12px i-dont-exist"));
// true: the matching font is a nonexistent font

系统字体和未加载的字体

如果我们同时指定一个系统字体和一个集合中尚未加载的字体,那么 check() 返回 false

js
console.log(document.fonts.check("12px molot, Courier"));
// false: `molot` is in the set but not yet loaded

正在加载的字体

如果我们指定了集合中仍在加载的字体,check() 返回 false

js
function check() {
  font.load();
  console.log(document.fonts.check("12px molot"));
  // false: font is still loading
  console.log(font.status);
  // "loading"
}

check();

已加载的字体

如果我们指定了集合中已加载的字体,check() 返回 true

js
async function check() {
  await font.load();
  console.log(document.fonts.check("12px molot"));
  // true: font has finished loading
  console.log(font.status);
  // "loaded"
}

check();

规范

规范
CSS 字体加载模块等级 3
# dom-fontfaceset-check

浏览器兼容性