根据用户设置的字体将某一个字符绘制在canvas上(fillText()),并提取像素信息(getImageData()),然后和默认字体进行比对,如果像素不一致,说明字体生效,如果像素完全一致,说明字体不生效。

var isSupportFontFamily = function (f) {
    if (typeof f != "string") {
        return false
    }
    var h = "Arial";
    if (f.toLowerCase() == h.toLowerCase()) {
        return true
    }
    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);
        b.font = d + "px " + j + ", " + h;
        b.fillText(e, a / 2, i / 2);
        var k = b.getImageData(0, 0, a, i).data;
        return [].slice.call(k).filter(function (l) {
            return l != 0
        })
    };
    return g(h).join("") !== g(f).join("")
};