此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

Window:queryLocalFonts() 方法

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

安全上下文: 此特性仅在一些支持的浏览器安全上下文(HTTPS)中可用。

window.queryLocalFonts() 方法返回一个 Promise,其兑现为一个表示本地可用字体的 FontData 对象数组。

要使用此方法,用户必须同意授予 local-fonts 权限(可以通过 Permissions API 查询权限状态)。此外,此功能可能会被服务器上设置的权限策略阻止。

语法

js
queryLocalFonts(options) 

参数

options 可选

包含可选配置参数。目前仅定义了一个属性:

postscriptNames 可选

一个包含字体 PostScript 名称的数组。如果指定了此项,则只有 PostScript 名称与数组中的 PostScript 名称匹配的字体才会包含在结果中;如果没有,所有字体都将包含在结果中。

返回值

一个 Promise,其兑现为一个表示本地可用字体的 FontData 对象数组。

异常

NotAllowedError DOMException

首次调用该方法后,当浏览器出现权限提示时,用户选择拒绝授予此功能的权限。

SecurityError DOMException

此功能的使用被权限策略阻止,或者不是通过用户交互(如按下按钮)调用此特性,或当前的不透明。

示例

有关实时演示,请参阅字体选择演示

字体枚举

以下代码片段将查询所有可用的字体并打印元数据。例如,这可以用于填充字体选择器控件。

js
async function logFontData() { try { const availableFonts = await window.queryLocalFonts(); for (const fontData of availableFonts) { console.log(fontData.postscriptName); console.log(fontData.fullName); console.log(fontData.family); console.log(fontData.style); } } catch (err) { console.error(err.name, err.message); } } 

限制返回结果

要将返回的字体数据限制为特定的字体列表,使用 postscriptNames 选项。

js
async function returnSpecificFonts() { const availableFonts = await window.queryLocalFonts({ postscriptNames: ["Verdana", "Verdana-Bold", "Verdana-Italic"], }); return availableFonts; } 

访问底层数据

blob() 方法提供对底层 SFNT 数据的访问——这是一种可以包含其他字体格式的字体文件格式,例如 PostScript、TrueType、OpenType 或 Web 开放字体格式(WOFF)。

js
async function computeOutlineFormat() { try { const availableFonts = await window.queryLocalFonts({ postscriptNames: ["ComicSansMS"], }); for (const fontData of availableFonts) { // `blob()` 方法返回一个包含有效且完整的 SFNT 封装字体数据的 Blob。 const sfnt = await fontData.blob(); // 仅裁剪出我们需要的字节部分:前 4 个字节是 SFNT 版本信息。 // 规范:https://learn.microsoft.com/zh-cn/typography/opentype/spec/otff#organization-of-an-opentype-font const sfntVersion = await sfnt.slice(0, 4).text(); let outlineFormat = "UNKNOWN"; switch (sfntVersion) { case "\x00\x01\x00\x00": case "true": case "typ1": outlineFormat = "truetype"; break; case "OTTO": outlineFormat = "cff"; break; } console.log("矢量字体格式:", outlineFormat); } } catch (err) { console.error(err.name, err.message); } } 

规范

Specification
Local Font Access API
# dom-window-querylocalfonts

浏览器兼容性

参见