异步加载的Cufon不会在IE中呈现

gil*_*les 7 javascript ajax optimization internet-explorer cufon

我正在创建一个使用Cufon的网站,由于大量的Javascript,在页面权重方面特别重.因此,我正在尝试与head.js(http://headjs.com/)异步加载脚本,如下所示:

head.js("http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js", function() {
 head.js("/js/libs/cufon-yui.js", function() {
    head.js("/js/shared/Stag_Bold_700.font.js" , function() {
            Cufon.replace('h1', { fontFamily: 'Stag Bold' });
    });
 });
});
Run Code Online (Sandbox Code Playgroud)

因此首先下载Jquery,然后按顺序下载后续的cufon lib文件和cufon字体,然后最终调用Cufon来替换H1.显然,这是一个精简的示例,更换次数较少,但仅在尝试更换H1时仍然无效.

问题是,仅在Internet Explorer(6/7/8)中,文本没有被替换,但我可以看到Cufon肯定被称为.我可以确定这一点,因为标签中添加了"cufon-active cufon-ready"类.当我使用IE Developer工具栏检查标记时,cufon/cufoncanvas标记位于所选元素内部,但是由于缺少更好的单词,它们是不可见的.

在IE9中,脚本的行为与Chrome和Firefox类似.我已经尝试调整Cufon绘图引擎并更新到最新的1.09i版本以获得良好的衡量标准.如果我将Cufon调用语句移动到文档就绪事件而不是异步加载,它可以工作,但我正在尝试优化页面加载,我的网站将使用许多Cufon字体以及许多其他JS插件.我也尝试使用labs.js和head.js来异步加载适当的文件.

Cam*_*out 2

我遇到了同样的问题 - 我通过使用 head.js 的浏览器检测来解决此问题,执行以下操作:

if (head.browser.mozilla || head.browser.webkit || head.browser.opera ||
        (head.browser.ie && (head.browser.version == '9.0'))) {
        head.js('script/jquery.min.js',
                'script/cufon.js', function () {
                    head.js('script/bebas_neue_400.font.js', function () {
                        Cufon.replace('h1', {
                            textShadow: '1px 1px rgba(0, 0, 0, 0.2)'
                        }).now();
                        // or a head.js('scripts/file.with.cufon.replacement.js');
                    });
                });
            } else {
        // here we load scripts depending on GZIP support for this browser
        document.write('\x3Cscript type="text/javascript" src="script/jquery.min.js">\x3C/script>');
        document.write('\x3Cscript type="text/javascript" src="script/cufon.js">\x3C/script>');
        document.write('\x3Cscript type="text/javascript" src="script/bebas_neue_400.font.js">\x3C/script>');
        document.write('\x3Cscript type="text/javascript" src="script/file.with.cufon.replacement.js">\x3C/script>');            
    }
Run Code Online (Sandbox Code Playgroud)

您还可以使用条件注释(我没有使用条件注释,因为我也在 JavaScript 中进行 GZIP 支持检测,并且需要调整动态加载的脚本。)

这是一个 hack,但在库本身得到解决之前应该足够有用。

(我还在这里发布了 GIST 和更完整的示例)