FontFaceSet: check() メソッド

check()FontFaceSet のメソッドで、まだ完全に読み込まれていない FontFaceSet 内のフォントを使用しようとせずに、指定されたフォント指定を使ってテキストをレンダリングすることができれば true を返します。すなわち、フォントスワップを発生させることなく、フォント指定を使用することができます。

構文

js
check(font)
check(font, text)

引数

font

CSS の font プロパティの構文を使用するフォント指定、例えば "italic bold 16px Roboto" です。

text

Unicode 範囲がテキスト中の文字の少なくとも 1 つを含んでいるフォントフェイスに限定します。これは個々のグリフが網羅されているかどうかは調べません

返値

論理値で、指定されたフォント指定でテキストをレンダリングする場合、まだ完全に読み込まれていない FontFaceSet 内のフォントを使用しようしないならば true になります。

すなわち、この FontFaceSet に含まれる、指定されたフォント指定に一致するすべてのフォントは、status プロパティが "loaded" に設定されている、という意味です。

そうでない場合、この関数は false を返します。

次の例では、新しい FontFace を作成し、それを FontFaceSet に追加します。

js
const font = new FontFace(
  "molot",
  "url(https://interactive-examples.mdn.mozilla.net/media/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: 一致するフォントは設定に入っているが、まだ読み込まれていないフォント

システムフォント

check() の引数にシステムフォントだけを指定すると、設定するにはフォントを読み込まずにシステムフォントを使用することができるので、 true を返します。

js
console.log(document.fonts.check("12px Courier"));
// true: 一致するフォントはシステムフォント

存在しないフォント

FontFaceSet になく、システムフォントでもないフォントを指定した場合、 check()true を返します。

js
console.log(document.fonts.check("12px i-dont-exist"));
// true: 一致するフォントは存在しないフォント

メモ: この状況で Chrome は不正に false を返します。これは攻撃者がブラウザーがどのシステムフォントを保有しているかを簡単にテストできるため、フィンガープリンティングを容易にする可能性があるためです。

システムフォントと読み込まれていないフォント

システムフォントとまだ読み込まれていない集合のフォントの両方を指定した場合、 check()false を返します。

js
console.log(document.fonts.check("12px molot, Courier"));
// false: `molot` が集合の中にあるが、読み込まれていない

読み込み中のフォント

集合から読み込み中のフォントを指定した場合、 check()false を返します。

js
function check() {
  font.load();
  console.log(document.fonts.check("12px molot"));
  // false: フォントが読み込み中
  console.log(font.status);
  // "loading"
}

check();

読み込み済みのフォント

読み込んである集合からフォントを指定すると、 check()true を返します。

js
async function check() {
  await font.load();
  console.log(document.fonts.check("12px molot"));
  // true: フォントが読み込み完了
  console.log(font.status);
  // "loaded"
}

check();

仕様書

Specification
CSS Font Loading Module Level 3
# dom-fontfaceset-check

ブラウザーの互換性

BCD tables only load in the browser