2011-10-28 18 views
8

में गतिशील रूप से @ फ़ॉन्ट-फेस नियम जोड़ना मैं आईईएस स्टाइलशीट.addRule() विधि का उपयोग कर @ फ़ॉन्ट-फेस नियम जोड़ रहा हूं। हालांकि, @ प्रतीक उस विधि के 'चयनकर्ता' तर्क के लिए एक अस्वीकृत चरित्र है, इसलिए मुझे 'अमान्य तर्क' त्रुटि मिल रही है।आईई 8 और कम

s.addrule("@font-face", "font-family: 'Font Name'; src:url('/fonts/font.eot') etc...)"; 

क्या इन नियमों को गतिशील रूप से जोड़ने का कोई और तरीका है?

मैंने स्टाइल तत्व की आंतरिक HTML प्रॉपर्टी सेट करने की कोशिश की है, स्टाइलशीट संपत्ति की cssText प्रॉपर्टी सेट कर रहा है, और स्टाइल एलिमेंट के साथ टेक्स्ट नोड को भी जोड़ रहा है (जो IE को क्रैश करता है)।

कोशिश करने के लिए कोई अन्य तरीका?

+0

क्यों नहीं सशर्त टिप्पणी? और भी आपकी शैली-स्ट्रिंग को गलत उद्धृत किया गया है। और msdn पर tbe spec से, हस्ताक्षर नहीं है ... (चयनकर्ता, शैली [, सूचकांक])? – Andreas

+0

सशर्त टिप्पणियां कैसे मदद करती हैं? हाँ, फ़ंक्शन हस्ताक्षर जैसा कि आप बताते हैं - क्या मैंने कुछ गलत किया है? यह संयोग से वेबकिट में ठीक काम करता है। –

+0

[सशर्त टिप्पणियां] (http://www.quirksmode.org/css/condcom.html) केवल आईई या उसके विशिष्ट संस्करणों पर लागू करने के लिए सीएसएस निर्दिष्ट करने का एक तरीका प्रदान करते हैं। उदाहरण: ' ' – weir

उत्तर

6

cssText प्रॉपर्टी सेट करना काम करता है, लेकिन आपको दस्तावेज़ में @ font-face नियम जोड़ने से पहले दस्तावेज़ में स्टाइल तत्व डालना होगा। उदाहरण के लिए ...

var s = document.createElement('style'); 
s.type = "text/css"; 
document.getElementsByTagName('head')[0].appendChild(s); 
s.styleSheet.cssText = "@font-face {" + rule + "}"; 

जहां तक ​​मेरा यह बता सकते हैं कि पेज में शैली तत्व डालने से पहले सीएसएस नियमों के अन्य प्रकार सेट है, लेकिन नहीं @ फॉन्ट-फेस करने के लिए पूरी तरह से संभव है।

जैसे ... इस ठीक काम करता है:

var s = document.createElement('style'); 
s.type = "text/css"; 
s.styleSheet.cssText = "body { background: red}"; 
document.getElementsByTagName('head')[0].appendChild(s); 

लेकिन इस आईई 8 और कम दुर्घटनाओं:

var s = document.createElement('style'); 
s.type = "text/css"; 
s.styleSheet.cssText = "@font-face {" + rule + "}"; 
document.getElementsByTagName('head')[0].appendChild(s); 
+0

क्रोम मुझे बताता है कि 'स्टाइलशीट' अपरिभाषित है। लगता है कि 'cssText' 's.style' की संपत्ति प्रतीत होता है। इसके साथ, यह '