2015-12-22 11 views
7

के साथ काम करने के लिए webfontloader प्राप्त करना मेरे पास webfontloader ब्राउज़र संदर्भ में अच्छी तरह से काम कर रहा है। अब मैं यह देखने की कोशिश कर रहा हूं कि मैं इसे node.js + jsdom संदर्भ में काम कर सकता हूं, खासकर जब से वेबफॉन्टलोडर npm module के रूप में उपलब्ध है।node.js और jsdom

मुझे समझदार आउटपुट प्रदान करने के लिए नोड + जेएसडम काम कर रहा है, इसलिए मुझे पता है कि हिस्सा काम कर रहा है। लेकिन जब मैं वेब फोंट को सक्षम करने के लिए वेबफॉन्टलोडर को एकीकृत करने का प्रयास करता हूं, तो मैं अनावश्यक हूं।

मूल रूप से मैं webfontloader मॉड्यूल README में बताया गया है, जो उपयोग कर रहा हूँ:

ReferenceError: window is not defined

मैं एक window प्राप्त कर सकते हैं:

var WebFont = require('webfontloader'); 

WebFont.load({ 
    google: { 
    families: ['Droid Sans', 'Droid Serif'] 
    } 
}); 

लेकिन जैसा कि मैंने कर सकते हैं, मैं निम्नलिखित त्रुटि मिलती है कोशिश jsdom से ऑब्जेक्ट:

  // Get the document and window 
      var doc = jsdom.jsdom('<!doctype html><html><body><div id="container"></div></body></html>'), 
       win = doc.defaultView; 

लेकिन मैंकैसे पास करूंउस संदर्भ में window के रूप में उपयोग के लिए webfontloader में?

शायद मैं अपना नैतिकता दिखा रहा हूं, और असंभव पूछ रहा हूं।

+0

आप jsdom.env (....) संदर्भ में WebFont लोड हो रहा है की कोशिश की है? –

+0

क्या आपने नीचे दिए गए उत्तर का प्रयास किया था? – cviejo

+0

अभी तक नहीं। क्षमा करें, अभी तक एक मौका नहीं मिला है। हालांकि यह पूरी तरह से व्यवहार्य दिखता है, और मैं वास्तव में इसे जाने के लिए उत्सुक हूं। विस्तृत उत्तर के लिए धन्यवाद। – drmrbrewer

उत्तर

1

जब तक आप ऐसा करने के लिए नहीं एक अच्छा कारण है, मैं नहीं बल्कि आप jsdom.env या jsdom.jsdom साथ jsdom में webfontloader लोड हो रहा है, या तो version Google पर होस्ट की मेजबानी पुस्तकालय का उपयोग कर या यह अपने आप की मेजबानी की सलाह देते हैं। यह होता है का उपयोग करते हुए jsdom.env इस तरह दिखेगा:

var jsdom = require("jsdom"); 

jsdom.env( 
    '<!doctype html><html><body></body></html>', 
    ['https://ajax.googleapis.com/ajax/libs/webfont/1.5.18/webfont.js'], 
    function(err, win) { 

     var WebFont = win.WebFont; 

     WebFont.load({ 
      google: { 
       families: ['Droid Sans', 'Droid Serif'] 
      } 
     }); 
    } 
); 

तुम सच में एक NodeJS संदर्भ से webfontloader की आवश्यकता की जरूरत है, जहाँ तक मैं बता सकता हूँ webfontloader एक पैरामीटर के रूप में एक खिड़की पारित नहीं किया जा सकता है, लेकिन आप इस दरकिनार कर सकते हैं लाइब्रेरी में कुछ लाइनों को जोड़कर आसानी से।

  1. भागो npm install webfontloader
  2. खोलें "node_modules/webfontloader/webfontloader.js"
  3. एक module.exports समारोह है कि एक पैरामीटर के रूप में एक window वस्तु लेता है में "webfontloader.js" की सामग्री के संलग्न करें।

फ़ाइल (पूरे webfontloader पुस्तकालय स्रोत पेस्ट नहीं) कुछ ऐसा दिखाई दे सकता है:

module.exports = function(window){ 

    var exportsBackup = module.exports; 

    /* Web Font Loader v1.6.16 - (c) Adobe Systems, Google. License: Apache 2.0 */ 
    (function(){function aa(a,b,c){r ... 

    var loaderObject = module.exports; 
    module.exports = exportsBackup; 

    return loaderObject; 
}; 

मैं अस्थायी रूप से एक चर में module.exports स्टोर करते हैं सुनिश्चित करने के लिए हम इस फैशन को कई बार में मॉड्यूल की आवश्यकता होती है सकते हैं , क्योंकि webfontloader लाइब्रेरी module.exports ऑब्जेक्ट को प्रतिस्थापित करेगी।

आप किसी भी त्रुटि के बिना इस तरह पुस्तकालय की आवश्यकता होती है सकते हैं:

var jsdom = require("jsdom"); 

jsdom.env("https://nodejs.org/", [], function(err, win) { 

    var WebFont = require('webfontloader')(win); 

    WebFont.load({ 
     google: { 
      families: ['Droid Sans', 'Droid Serif'] 
     } 
    }); 

}); 
+0

संपादन 'वेबफॉन्टलोडर के चालाक सुझाव का उपयोग करना।जेएस' को पैरामीटर के रूप में 'विंडो' से गुजरने में सक्षम बनाने के लिए, अब मैं वास्तव में संदर्भ त्रुटि के बिना' WebFont.load() 'फ़ंक्शन का आविष्कार कर सकता हूं। लेकिन अब मुझे बिल्कुल वही समस्या मिल रही है जैसा कि यहां वर्णित है: http://stackoverflow.com/q/34163339/4070848 - दूसरे शब्दों में, वेबफॉन्ट की कोशिश करने का प्रयास हमेशा 'निष्क्रिय' शाखा तक पहुंच जाता है, और सफलतापूर्वक लोड नहीं होता । क्या आप 'jsdom' के साथ सफलतापूर्वक लोड किया गया वेबफॉन्ट प्राप्त करने में सक्षम हैं? और मैंने वेबफॉन्टलोडर को आजमाने और ट्रिक करने के लिए कस्टम 'userAgent' को' jsdom' से गुजरने का प्रयास किया, इसका कोई फायदा नहीं हुआ। – drmrbrewer

+0

ठीक है, मैं इसमें एक नज़र डालेगा। लेकिन पहले, नया साल मुबारक हो! – cviejo

+0

नया साल मुबारक हो (लगभग!) भी ... कुछ नए साल में हैं, दूसरों को काफी नहीं! – drmrbrewer

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