tsd*_*sds 6 html javascript css fonts
我的文档中有以下 css 规则
font-family: "Trebuchet MS", Tahoma;
Run Code Online (Sandbox Code Playgroud)
但我发现有些浏览器的 Trebuchet MS 字体
没有我需要的符号(一些带有非拉丁字符的语言)。
在这种情况下,浏览器显示正方形而不是符号。
我如何检查它(可能通过javascript)?
(即,如何检查
访问者浏览器中安装的字体中是否缺少某些符号)
在 Windows 上,您可以通过 JavaScript 检测字体中缺少哪些字符:
a) 创建一个设计器检测器字体,其中包含一个非常宽的notdef 字符,例如 100pt 宽。检测器字体需要是比例字体,其构造类似于Adobe notdef字体AND-Regular.otf
。(此链接也可能相关?)。
b)使用检测器字体作为后备字体(这里我使用adobe notdef
检测器字体)例如
<div style="font-family: sans-serif, Segoe UI symbol, adobe notdef">
�test□▯😘😅
😗😎😎🌊🌊😀
</div>
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过将单个 unicode 字符放入 div 中来display: inline-block
强制最小宽度来测试它。
如果字形不在字体列表中,则将使用最后一个字体中的 notdef 字形,其宽度为 100pt,可以在 javascript 中从 div 的 offsetWidth 检测到。
我对这个想法进行了足够的探索,以验证它很可能有效,但我没有足够的时间来实际编写工作代码,抱歉!
我希望该技术也适用于其他操作系统(除非浏览器.notdef
以另一种字体呈现字符!)。
或者,您可以使用零宽度字体,例如Adobe Blank,它具有零宽度.notdef
字符 0(AdobeBlank.otf
文件只有 20kb)。这可以检测缺失的字形,因为包含缺失字形的 div 最终会出现 offsetWidth == 0。但是我认为这比使用非常宽的字形是一种不太可靠的技术,因为存在宽度为零的有效字形,因此它对于有效的零宽度字形(特别U+200B
是可能还有其他控制字符?),将会得到误报。