перечислите каждый шрифт, который может отобразить браузер пользователя

Подобный плагин должен позволить вам сделать это: https://www.role-editor.com/

83
задан JasonMArcher 6 May 2015 в 23:24
поделиться

3 ответа

Версия JavaScript немного нестабильна. Он получает шрифты путем перебора известных шрифтов и тестирования.

Самый точный способ (хотя и должен использовать специальный плагин) - использовать Flash . Здесь вы можете получить список шрифтов, не проверяя их индивидуально, используя размеры.

Вам нужно будет решить, иметь ли точный список за счет того, что он не работает на некоторых устройствах (iDevices, браузеры без плагина Flash и т. Д.), Или частичный список с лучшей поддержкой только через JavaScript .

30
ответ дан 24 November 2019 в 08:56
поделиться

Я недавно заметил, что, если я установил context.font значение для холста HTML5, к чему-то недопустимому, такому как "спам", изменение проигнорировано холстом. Я не знаю, является ли это конкретным браузером, но это, кажется, прокладывает себе путь на Chrome. Я также видел другие сообщения ( шрифт холста HTML 5, проигнорированный ), которые указывают, что это происходит в других браузерах.

можно было тогда выписать строку со значением по умолчанию, которому я верю, "гротесковый шрифт на 10 пкс" ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font), установите шрифт на один, Вы тестируете и пишете строку снова. Если это совпадает с первым рисунком, то шрифт не доступен.

0
ответ дан 24 November 2019 в 08:56
поделиться

Да, есть! Я так рад, что вы задали этот вопрос, потому что теперь я тоже хочу его использовать.

+1 за вопрос, и вот ваш ответ :)

http://www.lalit.org/lab/javascript-css-font-detect

Код из http: / /www.lalit.org/wordpress/wp-content/uploads/2008/05/fontdetect.js?ver=0.3

/**
 * JavaScript code to detect available availability of a
 * particular font in a browser using JavaScript and CSS.
 *
 * Author : Lalit Patel
 * Website: http://www.lalit.org/lab/javascript-css-font-detect/
 * License: Apache Software License 2.0
 *          http://www.apache.org/licenses/LICENSE-2.0
 * Version: 0.15 (21 Sep 2009)
 *          Changed comparision font to default from sans-default-default,
 *          as in FF3.0 font of child element didn't fallback
 *          to parent element if the font is missing.
 * Version: 0.2 (04 Mar 2012)
 *          Comparing font against all the 3 generic font families ie,
 *          'monospace', 'sans-serif' and 'sans'. If it doesn't match all 3
 *          then that font is 100% not available in the system
 * Version: 0.3 (24 Mar 2012)
 *          Replaced sans with serif in the list of baseFonts
 */

/**
 * Usage: d = new Detector();
 *        d.detect('font name');
 */
var Detector = function() {
    // a font will be compared against all the three default fonts.
    // and if it doesn't match all 3 then that font is not available.
    var baseFonts = ['monospace', 'sans-serif', 'serif'];

    //we use m or w because these two characters take up the maximum width.
    // And we use a LLi so that the same matching fonts can get separated
    var testString = "mmmmmmmmmmlli";

    //we test using 72px font size, we may use any size. I guess larger the better.
    var testSize = '72px';

    var h = document.getElementsByTagName("body")[0];

    // create a SPAN in the document to get the width of the text we use to test
    var s = document.createElement("span");
    s.style.fontSize = testSize;
    s.innerHTML = testString;
    var defaultWidth = {};
    var defaultHeight = {};
    for (var index in baseFonts) {
        //get the default width for the three base fonts
        s.style.fontFamily = baseFonts[index];
        h.appendChild(s);
        defaultWidth[baseFonts[index]] = s.offsetWidth; //width for the default font
        defaultHeight[baseFonts[index]] = s.offsetHeight; //height for the defualt font
        h.removeChild(s);
    }

    function detect(font) {
        var detected = false;
        for (var index in baseFonts) {
            s.style.fontFamily = font + ',' + baseFonts[index]; // name of the font along with the base font for fallback.
            h.appendChild(s);
            var matched = (s.offsetWidth != defaultWidth[baseFonts[index]] || s.offsetHeight != defaultHeight[baseFonts[index]]);
            h.removeChild(s);
            detected = detected || matched;
        }
        return detected;
    }

    this.detect = detect;
};

Summary

Как это работает?

Этот код работает по тому простому принципу, что каждый появляется персонаж по разному в разных шрифтах. Так что разные шрифты потребуют разных ширина и высота для одной и той же строки символов с одинаковым размером шрифта.

62
ответ дан 24 November 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: