На основе блок-схемы @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();
});