如何检查字体是否有符号

tsd*_*sds 6 html javascript css fonts

我的文档中有以下 css 规则

font-family: "Trebuchet MS", Tahoma;
Run Code Online (Sandbox Code Playgroud)

但我发现有些浏览器的 Trebuchet MS 字体
没有我需要的符号(一些带有非拉丁字符的语言)。
在这种情况下,浏览器显示正方形而不是符号。

我如何检查它(可能通过javascript)?
(即,如何检查
访问者浏览器中安装的字体中是否缺少某些符号)

rob*_*cat 5

在 Windows 上,您可以通过 JavaScript 检测字体中缺少哪些字符:

a) 创建一个设计器检测器字体,其中包含一个非常宽的notdef 字符,例如 100pt 宽。检测器字体需要是比例字体,其构造类似于Adob​​e notdef字体AND-Regular.otf。(此链接也可能相关?)。

b)使用检测器字体作为后备字体(这里我使用adobe notdef检测器字体)例如

    <div style="font-family: sans-serif, Segoe UI symbol, adobe notdef">
       &#xFFFD;test&#x25a1;&#x25AF;&#x1F618;&#x1F605;
       &#x1F617;&#x1F60E;&#x1F60E;&#x1F30A;&#x1F30A;&#x1F600;
    </div>
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过将单个 unicode 字符放入 div 中来display: inline-block强制最小宽度来测试它。

如果字形不在字体列表中,则将使用最后一个字体中的 notdef 字形,其宽度为 100pt,可以在 javascript 中从 div 的 offsetWidth 检测到。

我对这个想法进行了足够的探索,以验证它很可能有效,但我没有足够的时间来实际编写工作代码,抱歉!

我希望该技术也适用于其他操作系统(除非浏览器.notdef以另一种字体呈现字符!)。

或者,您可以使用零宽度字体,例如Adob​​e Blank,它具有零宽度.notdef字符 0(AdobeBlank.otf文件只有 20kb)。这可以检测缺失的字形,因为包含缺失字形的 div 最终会出现 offsetWidth == 0。但是我认为这比使用非常宽的字形是一种不太可靠的技术,因为存在宽度为零的有效字形,因此它对于有效的零宽度字形(特别U+200B是可能还有其他控制字符?),将会得到误报。


Rod*_*igo 3

据我所知,您无法检查单个符号,但可以检查编码。