2011-02-08 42 views
7

不会呈现我创建它使用的Cufón,并在页面重量方面特别重的部位,由于大量的Javascript。所以我想在脚本异步地head.js(http://headjs.com/)像这样加载:的Cufón异步加载在IE

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' }); 
    }); 
}); 
}); 

所以jQuery是第一次下载,后续的CufónLIB文件和字体的Cufón按顺序下载,然后是的Cufón最后呼吁取代H1。显然,这是一个减少替换的例子,但是当试图替换H1时仍然不起作用。

的问题是,只有在Internet Explorer(6/7/8),文本不会被替换,但我可以看到的Cufón肯定已经被调用。我可以确定这一点,因为标签中添加了“cufon-active cufon-ready”类。当我使用IE Developer工具栏检查标记时,cufon/cufoncanvas标签存在于选定的元素中,但由于缺乏更好的单词,它们不可见。

在IE9中,按照预期类似于Chrome和Firefox的行为脚本。我已经尝试调整Cufon绘图引擎,并已更新到最新的1.09i版本,以获得更好的效果。如果我在打电话的Cufón报表移到文档准备事件而不是装载的异步方式,它的工作原理,但我想优化页面加载和我的网站将使用数量的Cufón字体,以及许多其他的JS插件。我也尝试使用labs.js和head.js异步加载适当的文件。

+4

也很烂,你应该提交一个错误。 – Marko 2011-02-08 09:14:23

+0

Fix为[合并](https://github.com/sorccu/cufon/commit/79ea413a3aadc30d8cffb05faade6e003d9e7e5a)到主存储库。 – 2012-02-10 22:09:02

回答

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>');    
    } 

你也可以使用条件的意见(我没有,因为我也做在JavaScript GZIP支持检测和调整这些动态加载脚本需要。)

这是一个黑客,但直到它的库本身内处理应该是足够用。

(我还贴出GIST一个更完整的例子here

+0

我很伤心。因为它只影响cufon,你仍然可以在ie部分使用head.js作为jquery等,但是单独加载cufon还是? – worenga 2011-04-21 12:48:12

2

尝试调用

<script type="text/javascript"> Cufon.now(); </script> 

</body>标签即将关闭。

+1

这可能会在Cufon有机会被加载脚本下载之前调用:SCRIPT5009:'Cufon'未定义。我也尝试在Cufon.replace调用后立即放置此行,但仍然没有任何结果 – giles 2011-02-08 09:33:56

+0

这没有奏效。 – giles 2011-02-13 22:28:08

1

尝试Cufon.replace电话后加入Cufon.now(),就像这样:

Cufon.replace('h1', { fontFamily: 'Stag Bold' }); 
Cufon.now(); 
0

我类似CameraSchoolDropout的做法的方式解决了这个,只是不使用Document.write,我使用的是IE条件的标签,并YepNope.js

This issue on github说他们有问题使用document.createElement('script'),我只是感觉使用IE条件更好。

你可以看到,我在http://epraxadev.com/yepnope/

<head> 

<style type="text/css"> 
#txt { visibility:hidden; } 
</style> 

<!--[if lte IE 8]> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
<script src="js/cufon-yui.js"></script> 
<script src="js/adventor.cufon.js"></script> 
<![endif]--> 

<script src="js/modernizr.custom.js"></script> 
<script> 
yepnope([{ 
    test: window.jQuery, 
    nope: { 
     'yJ': '//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js', 
     'yCufon': 'js/cufon-yui.js', 
     'yFont': 'js/museo.font.js' 
    }, 
    callback: { 
     'yJ': function(){ 
      console.log("YepNope loaded jQuery! This isn't IE!"); 
     } 
    }, 
    complete: function() { 
     console.log('All browsers, including IE, will show this'); 

     Cufon.replace('h1'); 

     $(document).ready(function(){ 
      $('#txt').css('visibility', 'visible'); 
     }); 
    } 
}]); 
</script> 

<noscript> 
    <style type="text/css"> 
    #txt { visibility:visible; } 
    </style> 
</noscript> 

</head> 
0

创建现在只使用普通<script>标签加载jQuery和的Cufón一个例子页面,将使用脚本加载后续文件。

使用document.write是一种不好的方法,因为它只有在DOMReady之前加载/执行脚本并使用浏览器嗅探来执行时才有效,因为它可能会给出错误结果。

有条件的意见是不是一个好的解决方案,因为你可能需要在将来更新脚本,你必须记住在2米不同的地方是不好的维护更新它。

按照this issue on GitHub知道什么时候该错误是固定的。