[英]detect if font download in IE is enabled
有沒有辦法檢測Internet Explorer中的字體下載屬性是否已禁用或啟用?
目前,如果我要為字體渲染實現@ font-face解決方案(font-squirrel或typekit或其他), 除非 Internet Explorer禁用其“字體下載”選項, 否則所有瀏覽器都會很好用。
此設置可在IE> Internet選項>安全性>自定義級別>下載>字體下載>啟用/禁用中找到。
如果我能檢測到這個選項,我可以回到javascript方法。
這些解決方案不起作用,因為此選項實際上不會禁用該功能,它會阻止發生下載:
編輯:我應該提到我們不能使用服務器端解決方案,它必須是純粹的客戶端腳本。
由於此功能可防止發生下載,因此(相當臟的)解決方案是要求IE下載所謂的字體,這實際上是服務器上放置的簡單腳本,例如。 一個cookie說“好吧他得到字體”並返回一個空白頁面。 當用戶加載下一頁時,如果沒有cookie,您將部署Javascript機器。
我意識到這個問題已經過時了,但對於一些IT安全嚴格的企業互聯網用戶來說,這個問題仍然存在。 我查看了上面的解決方案和其他解決方案,但它們對我來說效果不佳,所以我發現另一個解決方案不需要服務器端代碼,沒有javascript,也沒有css。 它本質上是神奇的,但它有一些局限性。
限制1:這僅適用於使用高數字代碼點顯示圖像的圖標字體。 它不適用於可讀文本的字體字體。
限制2:您必須找到一個標准的UTF-8符號,它是您自定義圖標的合適替代品。
例如,如果您有一個用於顯示星號的自定義字體,那么適當的后備將是unicode代碼點0x2605★。 因此,在您的字體生成代碼中,您需要將該代碼點硬編碼到您的css類中以獲取星形圖標。 如果您使用的是“grunt-webfont”,您可以在grunt文件中執行以下操作:
webfont: {
icons: {
options: {
codepoints: {
'star': 0x2605
...
}}}}
明星就是一個很好的例子; 為您的花式圖標找到合適的UTF8替代品可能具有挑戰性,因此這可能對每個人都不起作用。 考慮到這個問題影響了極少數用戶,我們認為這是一個合適的透明解決方案,不會影響普通用戶使用額外的js / css / cookie cruft。
基於@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,當請求font-face src url時,它會提取此腳本,該腳本會檢查類型,設置cookie並提供所選的webfont。 如果啟用了字體下載並且您沒有重新路由到字體文件,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();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.