определить, включена ли загрузка шрифтов в IE - PullRequest
12 голосов
/ 02 ноября 2011

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

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 02 ноября 2011

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

enter image description here

5 голосов
/ 29 сентября 2015

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

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

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

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

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

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

4 голосов
/ 05 ноября 2011

На основе блок-схемы @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, когда запрашивается src url font-face, он извлекает этот скрипт, который проверяет тип, устанавливает 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();
});
...