определить, включена ли загрузка шрифта в IE

Есть ли способ определить, отключено или включено свойство загрузки шрифтов в Internet Explorer?

В настоящее время, если бы я реализовал решение @font-face (font-squirrel, typekit или другое) для рендеринга шрифтов, все браузеры будут хорошо работать, кроме, если в Internet Explorer отключена опция «Загрузка шрифта». .

Этот параметр можно найти в IE > Свойства обозревателя > Безопасность > Пользовательский уровень > Загрузки > Загрузка шрифта > Включить/отключить.

Если я смогу обнаружить эту опцию, я могу вернуться к методам javascript.

Эти решения не работают, так как этот параметр фактически не отключает функцию, он предотвращает загрузку:

  • http://paulirish.com/2009/font-face-feature-detection/
  • http://www.lalit.org/lab/javascript-css-font-detect/

РЕДАКТИРОВАТЬ: я должен упомянуть, что мы не можем не использовать решение на стороне сервера, это должен быть исключительно сценарий на стороне клиента.


person Scorpius    schedule 01.11.2011    source источник


Ответы (3)


Поскольку эта функция предотвращает загрузку, (довольно грязное) решение будет состоять в том, чтобы попросить IE загрузить так называемый шрифт, который на самом деле является простым скриптом на вашем сервере, который помещает, например. cookie, говорящий «хорошо, он получил шрифт» и возвращающий пустую страницу. Когда пользователь загружает следующую страницу, вы развернете механизм Javascript, если файл cookie отсутствует.

введите здесь описание изображения

person zopieux    schedule 01.11.2011
comment
Это была моя первая идея, но мы не можем использовать сценарии на стороне сервера для этого конкретного проекта. В любом случае, как можно имитировать загрузку шрифта, как с @font-face? На данный момент я пытаюсь выполнить ajax-загрузку самого шрифта, и он загружается и загружается нормально, даже если загрузка шрифта отключена. - person Scorpius; 02.11.2011
comment
Загрузка с использованием JS, очевидно, будет работать независимо от варианта. Вы должны попросить IE загрузить шрифт, поместив @font-face, который ведет к сценарию, который я объяснил, чтобы вы могли видеть, загружает ли его браузер или нет. Если вы ничего не можете сделать на сервере, ну, я думаю, вы облажались. - person zopieux; 02.11.2011

Я понимаю, что этот вопрос устарел, но эта проблема все еще существует для некоторых корпоративных пользователей Интернета со строгой ИТ-безопасностью. Я просмотрел приведенные выше и другие решения, но они не сработали для меня, поэтому я нашел другое решение, которое не требует кода на стороне сервера, javascript и css. По сути, это магия, но у нее есть некоторые ограничения.

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

Ограничение 2: Вы должны найти стандартный символ UTF-8, который является подходящей заменой для вашего пользовательского значка.

Например, если у вас есть собственный шрифт, который вы используете для отображения символа звезды, подходящим запасным вариантом для него будет кодовая точка Unicode 0x2605 ★. Таким образом, в вашем коде генерации шрифта вам нужно будет жестко закодировать этот код для вашего класса css для вашего значка звезды. Если бы вы использовали «grunt-webfont», вы бы сделали что-то подобное в своем файле grunt:

webfont: {
    icons: {
        options: {
           codepoints: {
              'star': 0x2605
       ...
}}}}

Звезда — прекрасный пример; может быть сложно найти подходящую замену UTF8 для ваших причудливых значков, поэтому это может не работать для всех. Учитывая, что эта проблема затрагивает очень небольшое количество пользователей, мы посчитали, что это подходящее прозрачное решение, которое не влияет на обычных пользователей из-за лишних js/css/cookie.

person Jake    schedule 28.09.2015

Основываясь на блок-схеме @Zopieux, я смог заставить этот скрипт работать для IE6-9, когда загрузка шрифтов отключена, что в моем случае было для клиента, где, как и в других корпоративных интрасетях, этот параметр отключен.

CSS:

@font-face {  
    font-family: 'TestFont';  
    src: url('/includes/font.php?type=eot');  
    src: url('/includes/font.php?type=eot#iefix') format('embedded-opentype'),  
     url('/includes/font.php?type=woff') format('woff'),
     url('/includes/font.php?type=ttf') format('truetype'),
     url('/includes/font.php?type=svg#UniversLTStd49LtUltraCn') format('svg');
    font-weight: normal;  
    font-style: normal;  
}  

PHP, когда запрашивается URL-адрес src шрифта, он извлекает этот скрипт, который проверяет тип, устанавливает файл cookie и обслуживает выбранный веб-шрифт. Если загрузка шрифтов включена и вы не перенаправляетесь к файлу шрифта, IE выдаст ошибку @font-face:

<?php
$type = $_REQUEST['type'];
$location = "Location: /includes/fonts/universltstd-lightultracn-webfont.".$type;

// create a cookie
setrawcookie("FontDownloaded", 1, time()+3600*24, '/');
header($location);

?>

JS, затем на стороне клиента сделайте что-то подобное, чтобы проверить наличие файла cookie, и выполните альтернативу, например cufon-yui.js или typeface.js:

$(function() {
    $('body').append('<span id="TestFont"/>');
    $('#TestFont').html('Testing').css({
        fontFamily: 'TestFont',
        opacity: 0
    });

    // find cookie
    bool = Boolean(getCookie('FontDownloaded')); // use your own cookie method

    if (!bool) {
        // implement @font-face fallback        
        Cufon.replace('.items', { fontFamily: 'NewFont' });
    }
    $('#TestFont').remove();
});
person Scorpius    schedule 04.11.2011