Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在正确的时间加载缓存字体_Javascript_Fonts_Webfonts_Webfont Loader - Fatal编程技术网

Javascript 在正确的时间加载缓存字体

Javascript 在正确的时间加载缓存字体,javascript,fonts,webfonts,webfont-loader,Javascript,Fonts,Webfonts,Webfont Loader,我有一些通过Webfontloader加载的webfonts,如下所示 <script src="//ajax.googleapis.com/ajax/libs/webfont/1.5.10/webfont.js"></script> <script> WebFont.load({ custom: { families: ['BlenderProBook', 'BlenderProMedium']

我有一些通过Webfontloader加载的webfonts,如下所示

<script src="//ajax.googleapis.com/ajax/libs/webfont/1.5.10/webfont.js"></script>
<script>
    WebFont.load({
        custom: {
            families: ['BlenderProBook', 'BlenderProMedium']
        }
    });
</script>

WebFont.load({
自定义:{
族:['BlenderProBook','BlenderProMedium']
}
});
第一次加载页面时效果非常好。。。问题是,当刷新页面时,它仅在html中请求时检索缓存字体,而不是在我的ReactJS应用程序运行之前(Webfontloader通常获取它们时)。这对我来说太晚了,因为我正在预生成的SVG中使用它们


有没有办法强迫它每次都获取未缓存的字体?或者更好,在正确的时间加载缓存的字体。

我找到了一个解决方案,如果没有其他人能提供更好的解决方案,我会将其作为我的答案

我的字体在应用程序中被广泛用于计算文本宽度,因此布局。。。(这就是为什么需要在应用程序运行之前加载它),所以我决定使用文本宽度代码作为测试来阻止应用程序运行

这是密码

var testFont = require('./components/svgText.js');
var timer = setInterval(function () {
    var test = (testFont('TEST', 'BlenderProBook', 20).width === 39.75);
    if (test) {
        clearInterval(timer);
        Router.run(routes, function (Handler) {
            React.render(<Handler/>, document.body);
        });
    }
}, 50);
这似乎工作得很好,尽管在测试一个神奇的数字(宽度)时感觉有点不舒服

renderedTextSize = function (string, font, fontSize) {
    var paper = Raphael(0, 0, 0, 0);
    paper.canvas.style.visibility = 'hidden';
    var el = paper.text(0, 0, string);
    el.attr('font-family', font);
    el.attr('font-size', fontSize);
    var bBox = el.getBBox();
    paper.remove();
    return {
        width: bBox.width,
        height: bBox.height
    };
};

module.exports = renderedTextSize;