js代码,检测网页实际渲染字体的两种方案原理
发布于 作者:苏南大叔 来源:程序如此灵动~

还是回到检测网页实际渲染字体的这个话题上,本文列出两个在国外论坛上看到的代码。测试结果是各有优劣,检测结果也是偶尔准确,偶尔不准确。所以,这里就是列出来学习学习思路。本来苏南大叔是改了一些逻辑的,后来发现检测结果都不是太理想,就没有继续修改了。贴出来的代码,都是原版的,肯定是有一些问题的,大家自行调试。

大家好,这里是苏南大叔的博客,随便写写技术文章的地方,一个不想被百度云备案一直各种威胁的地方。本文描述检测网页实际渲染字体的两个可能的方案(意思是效果都不咋地)。测试环境:win10
,chrome@105.0.5195.102
。这两个代码,都来自于下面这个页面地址:
方案一,比较canvas
数据
这里就不详细说了,大体的思路就是,先在canvas
上面设置一个不存在的字体,获得字体不存在的时候的标准数据。然后再分别设置目标字体里面的字体,去比较。如果数据有变化,这个字体就是存在的的。因为是依次设置的,所以第一个被检测到存在的字体必然是生效的字体。
不过实际的效果是,偶尔检测的对,偶尔不对。所以,大家自己调试吧。
方案二,比较字体宽度
这个代码的原理是这样的:这里加载了一个特殊的字体void
,这个字体不显示任何内容,所以,它渲染的元素的实际宽度都非常非常窄。那么,对于用于检测的系列字体,依然是顺序检测。但凡被检测的字体存在的话,这个渲染的元素宽度就会明显不同。那么,就可以判断字体的存在性。依据font-family
的生效顺序,它就是个生效的被渲染的字体。
这个代码的实际测试结果是:偶然会发生检测到undefined
的情况。所以,效果也不是很好。
相关链接
这两个代码,都来自于下面这个链接:
有个谷歌插件,叫做font finder
,实现的效果和本文描述的效果是差不多的,大家可以去试试看。
下面还有其它的相关文章:
值得说明的是:有一些特殊的字体,是一组字体。具体表示的是哪个字体,还是要具体问题具体分析的。或者说,可能出现的检测结果是这种带皮儿的字体名字的情况。
总结
这里的两个检测字体实际渲染结果的代码,是存在有使用场景的,具体的效果就有待考证了。更多字体相关文章,请点击:


