localfontaccess并非html5标准api,实际为chrome/edge实验性web font access api,需https、用户手势触发及显式授权,调用window.querylocalfonts()获取本地字体元数据并动态注册@font-face。

LocalFontAccess 并不是 HTML5 的标准 API,目前(截至 2024 年)不存在名为 LocalFontAccess 的 Web 标准接口。你可能混淆了以下两个概念:
- ✅
window.queryLocalFonts():这是 Chrome 88+(桌面版)引入的实验性、受限制的字体访问 API,属于 Web Font Access API(W3C 工作草案阶段),并非 HTML5 内置功能,也不叫 LocalFontAccess。 - ❌ 没有
LocalFontAccess这个全局对象或方法 —— 直接调用会报ReferenceError。
✅ 网页设计工具如何「安全、合规」地访问本地字体?
目前唯一可行的官方路径是使用 Web Font Access API(需满足严格条件)。以下是关键要点和实操方式:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
? 前提条件(缺一不可)
- 用户使用 Chrome 88+ 或 Edge 91+ 桌面版(macOS / Windows)
- 网站通过 HTTPS 提供服务(localhost 也允许)
- 页面已获得用户显式授权:需在
beforeinstallprompt或用户手势(如点击按钮)后调用 - 用户在弹出的系统级权限对话框中手动点击「允许」
? 如何调用本地字体(代码示例)
async function loadLocalFonts() {
try {
// ✅ 必须在用户手势(如 click)内调用
const fonts = await window.queryLocalFonts();
fonts.forEach(font => {
console.log(font.fullName); // 如 "Inter Bold"
console.log(font.postscriptName); // 如 "Inter-Bold"
console.log(font.family); // 如 "Inter"
console.log(font.style); // "normal" / "italic"
console.log(font.weight); // 400, 700 等
});
// ✅ 可将字体注册为 @font-face(仅限当前页面渲染,不持久)
fonts.forEach(font => {
const blob = font.blob(); // 返回 Blob,可用于 URL.createObjectURL
const url = URL.createObjectURL(blob);
const style = document.createElement('style');
style.textContent = `
@font-face {
font-family: "${font.fullName}";
src: url(${url});
font-weight: ${font.weight};
font-style: ${font.style};
}
`;
document.head.appendChild(style);
});
} catch (err) {
console.warn("无法访问本地字体:", err.name);
// 可能是 "NotAllowedError"(未授权)、"SecurityError"(非 HTTPS)、"NotSupportedError"(浏览器不支持)
}
}
// ? 绑定到按钮点击(必须由用户触发)
document.getElementById("load-fonts-btn").addEventListener("click", loadLocalFonts);
⚠️ 重要限制与注意事项
- 字体 不会自动上传到服务器,
font.blob()仅生成内存内可渲染的临时引用 - 无法读取字体文件路径、原始二进制结构或元数据(如版权信息、嵌入许可标志)
- 不支持获取系统默认中文字体列表(如“思源黑体”“微软雅黑”)——除非用户电脑已安装且字体名可被枚举
- Safari 和 Firefox 暂未实现该 API(截至 2024 年中),不能作为跨浏览器方案
? 实际设计工具中的替代策略
若需更广泛兼容或增强能力,主流工具通常组合使用:
- 字体预置 + 云字体库(如 Google Fonts、Adobe Fonts、字由 API)
-
拖拽上传
.ttf/.otf文件 → 前端用FileReader+FontFace加载(用户主动提供) -
Electron / Tauri 桌面版:绕过浏览器沙箱,直接读取
os.homedir()下字体目录(如/Library/Fonts或C:\Windows\Fonts) -
浏览器扩展辅助:通过
manifest.json声明"fonts"权限,再向网页注入字体列表(需用户安装扩展)
不复杂但容易忽略:这个 API 的核心不是“自由读取”,而是“用户可控的、一次性的字体发现”。所有操作都建立在隐私优先和显式授权之上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










