Javascript 让webfontloader使用node.js和jsdom

Javascript 让webfontloader使用node.js和jsdom,javascript,node.js,webfont-loader,Javascript,Node.js,Webfont Loader,我在浏览器环境中工作得很好。现在我想看看我是否能让它在+上下文中工作,特别是因为webfontloader是一个可用的 我已经让node+jsdom提供了合理的输出,所以我知道这部分工作正常。但是,当我尝试集成webfontloader以启用web字体时,我失败了 基本上,我使用的是自述文件中记录的webfontloader模块,即: var WebFont = require('webfontloader'); WebFont.load({ google: { families:

我在浏览器环境中工作得很好。现在我想看看我是否能让它在+上下文中工作,特别是因为webfontloader是一个可用的

我已经让node+jsdom提供了合理的输出,所以我知道这部分工作正常。但是,当我尝试集成webfontloader以启用web字体时,我失败了

基本上,我使用的是自述文件中记录的webfontloader模块,即:

var WebFont = require('webfontloader');

WebFont.load({
  google: {
    families: ['Droid Sans', 'Droid Serif']
  }
});
但是,尽管我可能会尝试,我得到以下错误:

ReferenceError:未定义窗口

我可以从jsdom获取
窗口
对象:

            // Get the document and window
            var doc = jsdom.jsdom('<!doctype html><html><body><div id="container"></div></body></html>'),
                win = doc.defaultView;
//获取文档和窗口
var doc=jsdom.jsdom(“”),
win=doc.defaultView;
但是如何将
win
传递到webfontloader中,以便在该上下文中用作
窗口


也许我是在表现我的天真,问一些不可能的问题。

除非你有充分的理由不这样做,否则我建议你使用
jsdom.env
jsdom.jsdom
加载到中,或者使用托管在谷歌上的托管库,或者自己托管它。使用
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']
            }
        });
    }
);
我确实临时将
模块.exports
存储在变量中,以确保我们可以多次以这种方式要求模块,因为webfontloader库将替换
模块.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']
        }
    });

});

您尝试过在jsdom.env(..)上下文中加载WebFont吗?您尝试过下面的答案吗?还没有。对不起,我还没有机会。虽然看起来完全有道理,但我真的很期待试一试。感谢您提供的详细答案。使用编辑
webfontloader.js
的巧妙建议来启用作为参数传递
window
,我现在可以在没有引用错误的情况下实际调用
WebFont.load()
函数。但现在我遇到了与这里描述的完全相同的问题:--换句话说,尝试加载webfont的操作总是到达
非活动分支,并且从未成功加载。您是否能够使用
jsdom
成功加载webfont?我试着将一个自定义的
userAgent
传递到
jsdom
,试图欺骗webfontloader,但没有成功。好的,我来看看。但首先,新年快乐!新年快乐(差不多!)。。。有的在新年,有的不太好!github上有几个关于这一点的开放问题,jsdom中似乎不支持字体,所以不确定您是否可以轻松解决这个问题,即使您更改UA.OK,看起来我的计划失败了(无法让webfonts与phantomjs或jsdom一起工作):-(感谢您对此进行研究。您手头有github链接吗?如果这是jsdom的一个基本问题,我仍然会将您的答案标记为正确(并奖励奖金!),因为这似乎是正确的(就实际让webfontloader玩jsdom而言,即使jsdom不想玩!)
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']
        }
    });

});