2011-11-01 11 views
11

क्या यह पता लगाने का कोई तरीका है कि इंटरनेट एक्सप्लोरर में फ़ॉन्ट डाउनलोड संपत्ति अक्षम या सक्षम है या नहीं?पता लगाएँ कि आईई में फ़ॉन्ट डाउनलोड सक्षम है

वर्तमान में अगर मैं फ़ॉन्ट प्रतिपादन के लिए एक @ फॉन्ट-फेस समाधान (फ़ॉन्ट गिलहरी या बहुत बढ़िया या अन्य) को लागू करने के लिए गए थे, सभी ब्राउज़रों अच्छा को छोड़कर यदि इंटरनेट एक्सप्लोरर अपने 'फ़ॉन्ट डाउनलोड "विकल्प को अक्षम नहीं खेलेंगे।

यह सेटिंग आईई> इंटरनेट विकल्प> सुरक्षा> कस्टम स्तर> डाउनलोड> फ़ॉन्ट डाउनलोड> सक्षम/अक्षम करने में मिल सकती है।

यदि मैं इस विकल्प का पता लगा सकता हूं, तो मैं जावास्क्रिप्ट विधियों पर वापस आ सकता हूं।

  • http://paulirish.com/2009/font-face-feature-detection/:

    ये समाधान के लिए इस विकल्प के रूप में काम नहीं करते वास्तव में सुविधा को अक्षम नहीं है, यह होने से एक डाउनलोड होने से बचाता है

  • http://www.lalit.org/lab/javascript-css-font-detect/

संपादित करें: विशुद्ध रूप से मैं उल्लेख करना चाहिए कि हम एक सर्वर साइड समाधान का उपयोग नहीं नहीं कर सकते, यह होना चाहिए ग्राहक साइड स्क्रिप्टिंग।

उत्तर

6

चूंकि यह सुविधा एक डाउनलोड होने से रोकती है, इसलिए एक (बल्कि गंदे) समाधान आईई से एक तथाकथित फ़ॉन्ट डाउनलोड करने के लिए कहता है जो वास्तव में आपके सर्वर पर एक साधारण स्क्रिप्ट है जो उदाहरण देता है। एक कुकी कह रही है "ठीक है वह फ़ॉन्ट प्राप्त करता है" और एक खाली पृष्ठ देता है। जब उपयोगकर्ता अगले पृष्ठ को लोड करता है, तो यदि कुकी वहां नहीं है तो आप जावास्क्रिप्ट मशीनरी को तैनात करेंगे।

enter image description here

+0

यह मेरा पहला विचार था, लेकिन हम इस विशेष परियोजना के लिए किसी सर्वर साइड स्क्रिप्टिंग का उपयोग नहीं कर सकते हैं। किसी भी मामले में, एक फ़ॉन्ट डाउनलोड के साथ एक फ़ॉन्ट डाउनलोड अनुकरण कैसे करेगा? फिलहाल, मैं एक एजेक्स को फ़ॉन्ट का ही प्राप्त करने का प्रयास कर रहा हूं, और फ़ॉन्ट-डाउनलोडिंग अक्षम होने पर भी यह ठीक हो जाता है और डाउनलोड होता है। – Scorpius

+1

जेएस का उपयोग करके डाउनलोड करना स्पष्ट रूप से काम करेगा जो भी विकल्प है। आपके पास * फ़ॉन्ट को डाउनलोड करने के लिए आईई से पूछना है जो @ फ़ॉन्ट-फेस डालने से है जो मैंने समझाया स्क्रिप्ट की ओर जाता है, ताकि आप देख सकें कि ब्राउजर इसे डाउनलोड करता है या नहीं। यदि आप सर्वर पर कुछ भी नहीं कर सकते हैं, तो मुझे विश्वास है कि आप खराब हो गए हैं। – zopieux

4

@Zopieux प्रवाह चार्ट के आधार पर, मैं एक ग्राहक जहां अन्य कॉर्पोरेट इंट्रानेट्स की तरह इस राशि के लिए IE6-9 के लिए इस स्क्रिप्ट काम करने के लिए जब फ़ॉन्ट डाउनलोड अक्षम किया गया है, जो मेरे मामले में था सक्षम था सेटिंग अक्षम

सीएसएस:

@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; 
} 

पीएचपी, जब फॉन्ट-फेस src यूआरएल का अनुरोध किया जाता है, यह इस स्क्रिप्ट है, जो, प्रकार की जाँच करता है कुकी सेट खींचती है, और पसंद की webfont कार्य करता है।

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

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

?> 

जे एस, तो क्लाइंट की तरफ, कुछ इस तरह की जाँच करने के कार्य करें: फ़ॉन्ट डाउनलोड सक्षम है और आप फिर से मार्ग नहीं है फॉन्ट फाइल करने के लिए हैं, तो आईई एक @ फॉन्ट-फेस त्रुटि फेंक होगा

$(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(); 
}); 
4

मुझे पता है इस सवाल पुराना है, लेकिन यह समस्या अभी भी सख्त आईटी सुरक्षा के साथ कुछ कॉर्पोरेट इंटरनेट उपयोगकर्ताओं के लिए मौजूद है: कुकी के लिए, और cufon-yui.js या typeface.js जैसे वैकल्पिक प्रदर्शन करते हैं। मैंने ऊपर और दूसरों के समाधानों को देखा, लेकिन उन्होंने मेरे लिए अच्छा काम नहीं किया, इसलिए मुझे एक और समाधान मिला जिसके लिए कोई सर्वर साइड कोड, जावास्क्रिप्ट नहीं, और कोई सीएसएस की आवश्यकता नहीं है। यह अनिवार्य रूप से जादू है, लेकिन इसमें कुछ सीमाएं हैं।

सीमा 1: यह केवल आइकन-फोंट के लिए काम करेगा जो छवियों को प्रदर्शित करने के लिए उच्च संख्या कोडपॉइंट्स का उपयोग करते हैं। यह पठनीय पाठ के लिए टाइपफेस फोंट के लिए काम नहीं करेगा।

सीमा 2: आपको एक मानक यूटीएफ -8 प्रतीक मिलना चाहिए जो आपके कस्टम आइकन के लिए उपयुक्त प्रतिस्थापन है।

उदाहरण के लिए, यदि आपके पास एक कस्टम फ़ॉन्ट है जिसका उपयोग आप स्टार प्रतीक प्रदर्शित करने के लिए करते हैं, तो इसके लिए उपयुक्त फॉलबैक यूनिकोड कोड पॉइंट 0x2605 होगा। तो, अपने फ़ॉन्ट जनरेशन कोड में, आपको अपने स्टार आइकन के लिए अपने सीएसएस क्लास को कोडपॉइंट हार्ड कोड की आवश्यकता होगी। यदि आप "ग्रंट-वेबफॉन्ट" का उपयोग कर रहे थे तो आप अपनी गंदगी फ़ाइल में ऐसा कुछ करेंगे:

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

स्टार एक आदर्श उदाहरण है; अपने फैंसी आइकन के लिए उपयुक्त यूटीएफ 8 प्रतिस्थापन ढूंढना चुनौतीपूर्ण हो सकता है, इसलिए यह हर किसी के लिए काम नहीं कर सकता है। यह देखते हुए कि यह समस्या उपयोगकर्ताओं की एक बहुत छोटी संख्या को प्रभावित करती है, हमने महसूस किया कि यह एक उपयुक्त पारदर्शी समाधान था जिसने अतिरिक्त जेएस/सीएसएस/कुकी क्रूफ्ट के साथ नियमित उपयोगकर्ताओं को प्रभावित नहीं किया।

संबंधित मुद्दे