http://www.zhangxinxu.com/wordpress/2018/02/js-detect-suppot-font-family/

本文根据张鑫旭文章。

字体函数:

var dataFont = {windows: [{ch: '宋体',en: 'SimSun'}, {ch: '黑体',en: 'SimHei'}, {ch: '微软雅黑',en: 'Microsoft Yahei'}, {ch: '微软正黑体',en: 'Microsoft JhengHei'}, {ch: '楷体',en: 'KaiTi'}, {ch: '新宋体',en: 'NSimSun'}, {ch: '仿宋',en: 'FangSong'}],'OS X': [{ch: '苹方',en: 'PingFang SC'}, {ch: '华文黑体',en: 'STHeiti'}, {ch: '华文楷体',en: 'STKaiti'}, {ch: '华文宋体',en: 'STSong'}, {ch: '华文仿宋',en: 'STFangsong'}, {ch: '华文中宋',en: 'STZhongsong'}, {ch: '华文琥珀',en: 'STHupo'}, {ch: '华文新魏',en: 'STXinwei'}, {ch: '华文隶书',en: 'STLiti'}, {ch: '华文行楷',en: 'STXingkai'}, {ch: '冬青黑体简',en: 'Hiragino Sans GB'}, {ch: '兰亭黑-简',en: 'Lantinghei SC'}, {ch: '翩翩体-简',en: 'Hanzipen SC'}, {ch: '手札体-简',en: 'Hannotate SC'}, {ch: '宋体-简',en: 'Songti SC'}, {ch: '娃娃体-简',en: 'Wawati SC'}, {ch: '魏碑-简',en: 'Weibei SC'}, {ch: '行楷-简',en: 'Xingkai SC'}, {ch: '雅痞-简',en: 'Yapi SC'}, {ch: '圆体-简',en: 'Yuanti SC'}],'office': [{ch: '幼圆',en: 'YouYuan'}, {ch: '隶书',en: 'LiSu'}, {ch: '华文细黑',en: 'STXihei'}, {ch: '华文楷体',en: 'STKaiti'}, {ch: '华文宋体',en: 'STSong'}, {ch: '华文仿宋',en: 'STFangsong'}, {ch: '华文中宋',en: 'STZhongsong'}, {ch: '华文彩云',en: 'STCaiyun'}, {ch: '华文琥珀',en: 'STHupo'}, {ch: '华文新魏',en: 'STXinwei'}, {ch: '华文隶书',en: 'STLiti'}, {ch: '华文行楷',en: 'STXingkai'}, {ch: '方正舒体',en: 'FZShuTi'}, {ch: '方正姚体',en: 'FZYaoti'}],'open': [{ch: '思源黑体',en: 'Source Han Sans CN'}, {ch: '思源宋体',en: 'Source Han Serif SC'}, {ch: '文泉驿微米黑',en: 'WenQuanYi Micro Hei'}],'hanyi': [{ch: '汉仪旗黑',en: 'HYQihei 40S'}, {ch: '汉仪旗黑',en: 'HYQihei 50S'}, {ch: '汉仪旗黑',en: 'HYQihei 60S'}, {ch: '汉仪大宋简',en: 'HYDaSongJ'}, {ch: '汉仪楷体',en: 'HYKaiti'}, {ch: '汉仪家书简',en: 'HYJiaShuJ'}, {ch: '汉仪PP体简',en: 'HYPPTiJ'}, {ch: '汉仪乐喵体简',en: 'HYLeMiaoTi'}, {ch: '汉仪小麦体',en: 'HYXiaoMaiTiJ'}, {ch: '汉仪程行体',en: 'HYChengXingJ'}, {ch: '汉仪黑荔枝',en: 'HYHeiLiZhiTiJ'}, {ch: '汉仪雅酷黑W',en: 'HYYaKuHeiW'}, {ch: '汉仪大黑简',en: 'HYDaHeiJ'}, {ch: '汉仪尚魏手书W',en: 'HYShangWeiShouShuW'}],'fangzheng': [{"ch": "方正粗雅宋简体","en": "FZYaSongS-B-GB"}, {"ch": "方正报宋简体","en": "FZBaoSong-Z04S"}, {"ch": "方正粗圆简体","en": "FZCuYuan-M03S"}, {"ch": "方正大标宋简体","en": "FZDaBiaoSong-B06S"}, {"ch": "方正大黑简体","en": "FZDaHei-B02S"}, {"ch": "方正仿宋简体","en": "FZFangSong-Z02S"}, {"ch": "方正黑体简体","en": "FZHei-B01S"}, {"ch": "方正琥珀简体","en": "FZHuPo-M04S"}, {"ch": "方正楷体简体","en": "FZKai-Z03S"}, {"ch": "方正隶变简体","en": "FZLiBian-S02S"}, {"ch": "方正隶书简体","en": "FZLiShu-S01S"}, {"ch": "方正美黑简体","en": "FZMeiHei-M07S"}, {"ch": "方正书宋简体","en": "FZShuSong-Z01S"}, {"ch": "方正舒体简体","en": "FZShuTi-S05S"}, {"ch": "方正水柱简体","en": "FZShuiZhu-M08S"}, {"ch": "方正宋黑简体","en": "FZSongHei-B07S"}, {"ch": "方正宋三简体","en": "FZSong"}, {"ch": "方正魏碑简体","en": "FZWeiBei-S03S"}, {"ch": "方正细等线简体","en": "FZXiDengXian-Z06S"}, {"ch": "方正细黑一简体","en": "FZXiHei I-Z08S"}, {"ch": "方正细圆简体","en": "FZXiYuan-M01S"}, {"ch": "方正小标宋简体","en": "FZXiaoBiaoSong-B05S"}, {"ch": "方正行楷简体","en": "FZXingKai-S04S"}, {"ch": "方正姚体简体","en": "FZYaoTi-M06S"}, {"ch": "方正中等线简体","en": "FZZhongDengXian-Z07S"}, {"ch": "方正准圆简体","en": "FZZhunYuan-M02S"}, {"ch": "方正综艺简体","en": "FZZongYi-M05S"}, {"ch": "方正彩云简体","en": "FZCaiYun-M09S"}, {"ch": "方正隶二简体","en": "FZLiShu II-S06S"}, {"ch": "方正康体简体","en": "FZKangTi-S07S"}, {"ch": "方正超粗黑简体","en": "FZChaoCuHei-M10S"}, {"ch": "方正新报宋简体","en": "FZNew BaoSong-Z12S"}, {"ch": "方正新舒体简体","en": "FZNew ShuTi-S08S"}, {"ch": "方正黄草简体","en": "FZHuangCao-S09S"}, {"ch": "方正少儿简体","en": "FZShaoEr-M11S"}, {"ch": "方正稚艺简体","en": "FZZhiYi-M12S"}, {"ch": "方正细珊瑚简体","en": "FZXiShanHu-M13S"}, {"ch": "方正粗宋简体","en": "FZCuSong-B09S"}, {"ch": "方正平和简体","en": "FZPingHe-S11S"}, {"ch": "方正华隶简体","en": "FZHuaLi-M14S"}, {"ch": "方正瘦金书简体","en": "FZShouJinShu-S10S"}, {"ch": "方正细倩简体","en": "FZXiQian-M15S"}, {"ch": "方正中倩简体","en": "FZZhongQian-M16S"}, {"ch": "方正粗倩简体","en": "FZCuQian-M17S"}, {"ch": "方正胖娃简体","en": "FZPangWa-M18S"}, {"ch": "方正宋一简体","en": "FZSongYi-Z13S"}, {"ch": "方正剪纸简体","en": "FZJianZhi-M23S"}, {"ch": "方正流行体简体","en": "FZLiuXingTi-M26S"}, {"ch": "方正祥隶简体","en": "FZXiangLi-S17S"}, {"ch": "方正粗活意简体","en": "FZCuHuoYi-M25S"}, {"ch": "方正胖头鱼简体","en": "FZPangTouYu-M24S"}, /*{"ch":"方正铁筋隶书简体","en":"FZTieJinLiShu-Z14S"},{"ch":"方正北魏楷书简体","en":"FZBeiWeiKaiShu-Z15S"},*/ {"ch": "方正卡通简体","en": "FZKaTong-M19S"}, {"ch": "方正艺黑简体","en": "FZYiHei-M20S"}, {"ch": "方正水黑简体","en": "FZShuiHei-M21S"}, {"ch": "方正古隶简体","en": "FZGuLi-S12S"}, {"ch": "方正幼线简体","en": "FZYouXian-Z09S"}, {"ch": "方正启体简体","en": "FZQiTi-S14S"}, {"ch": "方正小篆体","en": "FZXiaoZhuanTi-S13T"}, {"ch": "方正硬笔楷书简体","en": "FZYingBiKaiShu-S15S"}, {"ch": "方正毡笔黑简体","en": "FZZhanBiHei-M22S"}, {"ch": "方正硬笔行书简体","en": "FZYingBiXingShu-S16S"}]
};// 系统默认字体
var rootFontFamily = (document.documentElement.currentStyle ? document.documentElement.currentStyle : window.getComputedStyle(document.documentElement)).fontFamily;var eleTables = document.getElementsByTagName('table');
var lenTables = eleTables.length;for(var index = 0; index < lenTables; index++) {var typeFont = eleTables[index].getAttribute('data-type');var arrDataFont = dataFont[typeFont];if(arrDataFont && arrDataFont.length) {var html = '';for(var start = 0; start < arrDataFont.length; start++) {var name = typeFont + start;var fontEn = arrDataFont[start].en,fontCh = arrDataFont[start].ch;// 是否标记为默认字体的处理var htmlFontEn = fontEn,htmlFontCh = fontCh;if(fontEn.toLowerCase() === rootFontFamily.toLowerCase()) {htmlFontEn += '<span class="red">(浏览器默认)</span>';} else if(fontCh.toLowerCase() === rootFontFamily.toLowerCase()) {htmlFontCh += '<span class="red">(浏览器默认)</span>';}html = html + '<tr style="font-family:\'' + fontEn + '\';"><td>' + htmlFontCh + '</td><td>' + htmlFontEn + '</td><td>' +'<p><input type="radio" id="' + name + '1" name="' + name + '" value="' + fontCh + '"' + (/简|汉仪|方正/.test(fontCh) || typeFont == 'other' ? ' disabled' : '') + '><label for="' + name + '1">中文名</label></p>' +'<p><input type="radio" id="' + name + '2" name="' + name + '" value="' + fontEn + '" checked><label for="' + name + '2">英文名</label></p>' +'<p><input type="radio" id="' + name + '3" name="' + name + '" value=""><label for="' + name + '3">浏览器默认</label></p>' +'</td></tr>';}eleTables[index].getElementsByTagName('tbody')[0].innerHTML = html;// 复选框事件eleTables[index].onclick = function(event) {event = event || window.event;var target = event.target;if(target && target.type == 'radio') {target.parentNode.parentNode.parentNode.style.fontFamily = target.value;}};}
} // JavaScript Document

检测函数:

var isSupportFontFamily = function(f) {
//    f是要检测的字体if(typeof f != "string") {return false}
//    h是基础字体var h = "Arial";if(f.toLowerCase() == h.toLowerCase()) {return true}
//    设置一个检测的字符A,看他是否支持f字体var e = "a";var d = 100;var a = 100,i = 100;var c = document.createElement("canvas");var b = c.getContext("2d");c.width = a;c.height = i;b.textAlign = "center";b.fillStyle = "black";b.textBaseline = "middle";var g = function(j) {b.clearRect(0, 0, a, i);
//        字体是传入的j,或者是默认的hb.font = d + "px " + j + ", " + h;b.fillText(e, a / 2, i / 2);
//        获取所有的canvas图片信息var k = b.getImageData(0, 0, a, i).data;
//        k调用数组的 filter方法,筛选符合条件的。改变原数组。return [].slice.call(k).filter(function(l) {return l != 0});};
//    返回结果,如果h默认字体和输入待检测字体f.通过g函数检测得到的字符串不一致,说明自提生效return    g(h).join("") !== g(f).join("");
};

html:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title></head><body><div id="result"></div></body>
</html>
<script src="font-ch-en.js" type="text/javascript" charset="utf-8"></script>
<script src="isSupportFontFamily.js" type="text/javascript" charset="utf-8"></script>
<script>var eleResult = document.getElementById('result');var arrFont = dataFont['OS X'];arrFont.forEach(function (obj) {var fontFamily = obj.en;console.log(fontFamily);eleResult.innerHTML = eleResult.innerHTML + '<p style="font-family:'+ fontFamily +';">'+ (isSupportFontFamily(fontFamily) ? '是' : '否') +':'+ obj.ch +'</p>';});
</script>

转载于:https://www.cnblogs.com/gaidalou/p/8479452.html

通过js检测浏览器支持的字体,从而显示支持的字体,让用户选择。相关推荐

  1. 使用modernizr.js检测浏览器对html5以及css3的支持情况

    使用modernizr.js检测浏览器对html5和css3的支持情况 详情请看主页:modernizr主页 1. modernizr 是什么? modernize 是一个js库----一个用于检测当 ...

  2. modernizr 支持html5,使用modernizr.js检测浏览器对html5以及css3的支持情况

    使用modernizr.js检测浏览器对html5和css3的支持情况 1.modernizr 是什么? modernize 是一个js库----一个用于检测当前浏览器对html5&css3 ...

  3. js检测浏览器类型以及版本信息

    js检测浏览器类型以及版本信息 DetectBrowser () {const userAgent = window.navigator.userAgentconst isChrome = userA ...

  4. 如何用js检测浏览器类型

    这个需求在前端开发当中是很常见的,大家都知道我们写的js或css在浏览器中是有兼容问题的,当下虽然大家可能不用感受的IE6带来的痛苦(别问我为什么是痛苦),但是你负责的项目本身就是政府.医院之类的项目 ...

  5. 通过jsp获取客户端的IP以及通过js检测浏览器类型

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的. 但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真 ...

  6. JS检测浏览器开发者工具是否打开

    在有些情况下 我们需要检测用户是否打开了浏览器的开发者工具 右键检查出来的就是开发者工具 比如前端爬虫检测 或者是避免用户非法篡改信息 本篇文章主要讲述几种前端js检测开发者工具是否打开的方法 1.重 ...

  7. js检测浏览器内核、版本号

    //检测浏览器内核--返回的是两个key,name:浏览器内核的名称---version:浏览器的版本号function isBroswer () {var _broswer = {};var sUs ...

  8. js 检测浏览器,呈现引擎和平台

    [javascript] view plaincopyprint?var client = function(){ //呈现引擎 var engine = { ie : 0, gecko : 0, w ...

  9. JS检测浏览器是否最大化

    function isFullScreen (){     if(         window.outerHeight === screen.availHeight     ){         i ...

最新文章

  1. 网络与服务器编程框架库 acl_3.0.13 发布
  2. python有什么功能-Python 3.9有什么新功能?
  3. MySQL常用数据类型小结
  4. MIGO+103收货到GR冻结库存和MB1B+344从非限制到冻结区别?
  5. 真假应用傻傻分不清,HideIcon病毒玩起“隐身计”
  6. Linux改变进程优先级的nice命令
  7. 【转】什么是CORS
  8. python匿名函数里用for_请问这段Python代码如何用匿名函数简化?
  9. How-to: Build VPP FD.IO development environment with Mellanox DPDK PMD.
  10. comment.html手机文件,comment.html
  11. ansys linux 安装教程pdf,Deepin linux安装Ansys13详细教程.pdf
  12. hadoop put命令的格式_hadoop Shell命令详解
  13. java oracle sqlldr,oracle sqlldr
  14. vscode 程序员鼓励师_把软萌程序猿鼓励师装进VScode?最强交互彩虹屁,GitHub2.5k星标...
  15. python:实现丢番图方程算法(附完整源码)
  16. MSDC 4.3 接口规范(6)
  17. 浙大 | PTA 习题5-6 使用函数输出水仙花数 (20分)
  18. 计算机毕业设计Java智能超市导购系统(源码+系统+mysql数据库+lw文档)
  19. java项目生成多个条码_java – 生成随机条形码 – 一个设计问题
  20. mac版免费吃鸡游戏(荒野行动)

热门文章

  1. 小程序的应用场景有哪些?小程序实际应用分析
  2. 2014新股申购流程
  3. python区分不同语句块_python通过什么来区分不同的语句块
  4. js截取字符串的后几位
  5. 计算机应用方面已进入什么为特征的时代,计算机考试题库:计算机基础练习题(7)...
  6. pip版本过低,更新到更高版本的一种方法
  7. linux 利用cat写文件名,在LINUX中如何用cat创建一个文件
  8. react接收后端文件_React 文件流实现文件下载
  9. 计算机专业第一学历考研究生,考研后第一学历是什么 非全日制研究生是第一学历吗...
  10. 测试工程师面试之项目介绍