我正在用 HTML5/Canvas 开发游戏。我的大部分游戏对象都表示为 Uncicode 字形。我在网站上嵌入了三种不同格式的字体。所有这三种字体都支持基本多语言平面和补充多语言平面中的大多数字形(换句话说:它们包含我用作游戏对象的符号)。
当我在多个浏览器上测试原型时,我很快意识到 Firefox/Gecko 中发生了一些奇怪的事情。我做了一个小测试,这就是我发现的。
在 Chrome 和其他基于 Webkit 的浏览器中,所有字体的所有字符都可以正常呈现。
Firefox 似乎无法加载字体。这很奇怪:我提供了所有常用格式(ttf、eot、woff、svg)的字体,并且没有跨站点恶作剧,因为它们保存在包含当前页面的文件夹的子文件夹中。但是,Firefox 以默认字体(Times New Roman)显示所有文本。另外值得注意的是,如果您使用的字体未包含在网页中但安装在本地计算机上,Firefox 将显示正常的拉丁字符,但任何其他 unicode 字符将再次出现在 Times New 中罗马。
这要么是 Firefox 中的错误,但当然更有可能是我在某个地方犯了错误。有人可以指出导致此问题的原因以及如何解决吗?
图片:
Firefox 的字体有问题,它们看起来都一样:
使用谷歌浏览器的页面应该是这样的:
自己检查一下,这里是当前原型的页面:http ://wmmusic.nl/codexamples/pixijs/fonttest/smuv2.html
编辑:
在 Mozilla 的#firefox IRC 频道进行了一些研究和询问后,我发现我使用的 .ttf 字体有问题。似乎字体中的某些表格以某种方式损坏,导致 Firefox 无法加载它。
调试器显示以下错误:
[14:05:04.286] downloadable font: table 'post': failed to parse table (font-family: "unifont" style:normal weight:normal stretch:normal src index:2)
source: http://wmmusic.nl/codexamples/pixijs/fonttest/fonts/unifont5-1.ttf
[14:05:04.286] downloadable font: rejected by sanitizer (font-family: "unifont" style:normal weight:normal stretch:normal src index:2)
source: http://wmmusic.nl/codexamples/pixijs/fonttest/fonts/unifont5-1.ttf
它对 .woff 和 .ttf 格式的两种字体(unifont 和 Code2000)都执行此操作(这些是 Firefox 读取的格式)。Quivira 现在似乎可以工作了。Quivira 是我用 FontSquirrel 转换的唯一字体,因为它是唯一一个足够小的字体。我使用 FontForge(用于 .svg 格式)、名为 tff2eot(用于 .eot 格式)的 CLI 以及来自 Mozilla 的名为 sfnt2woff(用于 .woff 格式)的工具转换了其他字体。
现在要弄清楚如何修复这些错误和/或让 Firefox 不关心它们。