2012-04-08 74 views
0

我正在使用Modernizr.load()方法來測試瀏覽器(ie)是否理解媒體查詢,如果沒有,我加載respond.js庫。通過modernizr.load載入respond.js異步很慢?

但是,我看到通過modernizr.load方法加載respond.js讓我得到了FOUC,而內聯腳本方法沒有。

modernizr.load方法:

<script> 
    Modernizr.load([{ 
    load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', 
    complete: function() { 
     if (!window.jQuery) { 
     yepnope('js/libs/jquery.js?v=1.7.2'); 
     } 
    } 
    }, 
    { 
    test: Modernizr.mq('only all'), 
    nope: 'js/plugins/respond.js?v=v1.1' 
    }]) 
</script> 

聯方法:

<!--[if lte IE 8]> 
    <script src="js/plugins/respond.js?v=v1.1"></script> 
<![endif]--> 

爲什麼會這樣?不應該是異步方法更快?或者內聯方法更好,因爲腳本阻止了DOM並等待腳本加載......?

回答

1

這取決於你對FOUC的關心程度。異步方法的優點是它是非阻塞的。我會切換它,以便Respond是第一個,這樣您就不必等待jQuery被解析。這可能會解決FOUC。在呼叫Modernizr.load<head>see here)是這樣的:

Modernizr.load([{ 
    test: Modernizr.mq('only all'), 
    nope: 'js/plugins/respond.js?v=v1.1' 
    },{ 
    load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', 
    complete: function() { 
     window.jQuery || Modernizr.load('js/libs/jquery.js?v=1.7.2'); 
    } 
}]); 

你的IE條件是很好的解決方案過於可以說是更好的。如果你這樣做,那麼只要把它的jQuery之前,你會被罰款:

<!--[if lt IE 9]> 
    <script src="js/plugins/respond.js?v=v1.1"></script> 
<![endif]--> 

Modernizr.load([{ 
    load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', 
    complete: function() { 
     window.jQuery || Modernizr.load('js/libs/jquery.js?v=1.7.2'); 
    } 
}]); 
+0

感謝您的幫助! – 2012-05-03 14:09:07

+0

@MartinBroder當然是男人! =] – ryanve 2012-05-03 17:29:20