Google Webfontloader无法正常工作?异步加载Web字体代码求助
我来帮你一步步排查Web Font Loader不工作的问题,先从你的代码里找几个关键的可能原因:
确认字体家族名称完全匹配
Web Font Loader对custom.families里的名称要求非常严格,必须和字体CSS文件中@font-face声明的font-family完全一致。比如你用的Noto Sans SC Sliced,打开对应的earlyaccess CSS链接,检查里面的字体名称是不是一模一样——有时候官方字体可能会有细微的拼写或空格差异,这是最常见的坑。调整样式应用的时机
你现在直接全局设置了font-family,这会导致浏览器在字体加载完成前就渲染fallback字体,而且如果加载失败,也不会自动回退得很顺畅。Web Font Loader会在字体加载状态变化时给<html>标签添加类名(比如wf-active表示全部加载完成,wf-inactive表示超时或失败),建议用这些类来控制字体切换:/* 默认用无衬线字体兜底 */ * { font-family: sans-serif; } #Logo { font-family: sans-serif; } /* 字体加载完成后替换目标字体 */ .wf-active * { font-family: 'Noto Sans SC Sliced', sans-serif; } .wf-active #Logo { font-family: 'Changa', sans-serif; }检查Web Font Loader脚本的可用性
你用的是本地路径/lib/webfontloader.js,先确认这个文件在服务器上的路径是否正确,有没有出现404错误。如果不确定,建议直接用Google官方的CDN版本,稳定性更高:<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script>验证字体CSS的加载状态
打开浏览器开发者工具(F12)的「Network」标签,刷新页面后查看你指定的两个字体CSS链接是否成功加载——有没有返回403/404,或者跨域问题?如果有加载错误,那字体肯定无法正常加载。调整超时时间(可选)
你设置的timeout: 5000是5秒超时,对于网络较慢的用户来说可能不够,可以适当延长到10秒(timeout: 10000),避免因为网络延迟导致的加载失败。
修复后的完整示例代码
<script> WebFontConfig = { custom: { families: ['Noto Sans SC Sliced', 'Changa'], urls: [ 'https://fonts.googleapis.com/css?family=Changa', 'https://fonts.googleapis.com/earlyaccess/notosansscsliced.css' ] }, timeout: 10000, // 可以添加回调函数查看加载状态 active: function() { console.log('所有字体加载完成!'); }, inactive: function() { console.log('字体加载超时或失败'); } }; </script> <script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script> <style type="text/css"> * { font-family: sans-serif; } #Logo { font-family: sans-serif; } .wf-active * { font-family: 'Noto Sans SC Sliced', sans-serif; } .wf-active #Logo { font-family: 'Changa', sans-serif; } </style>
内容的提问来源于stack exchange,提问作者Melon NG

