簡體   English   中英

檢測是否啟用了IE中的字體下載

[英]detect if font download in IE is enabled

有沒有辦法檢測Internet Explorer中的字體下載屬性是否已禁用或啟用?

目前,如果我要為字體渲染實現@ font-face解決方案(font-squirrel或typekit或其他), 除非 Internet Explorer禁用其“字體下載”選項, 否則所有瀏覽器都會很好用。

此設置可在IE> Internet選項>安全性>自定義級別>下載>字體下載>啟用/禁用中找到。

如果我能檢測到這個選項,我可以回到javascript方法。

這些解決方案不起作用,因為此選項實際上不會禁用該功能,它會阻止發生下載:

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

編輯:我應該提到我們不能使用服務器端解決方案,它必須是純粹的客戶端腳本。

由於此功能可防止發生下載,因此(相當臟的)解決方案是要求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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM