我加載了jQuery和Modernizr的在我的文檔的頭部這樣yepnope撥打粘貼到它的結束是有條件地加載插件:Modernizr的腳本序列和IE9
Modernizr.load({
test: Modernizr.csscolumns,
nope: 'js/jquery.masonry.js'
});
但插件未在IE9正確射擊。在經歷了很多頭疼之後,我注意到在IE9開發工具中,帶有條件加載的腳本的腳本標籤被動態地附加到我放置modernizr腳本的任何元素上。如果modernizr腳本在頭部,則生成的腳本標籤出現在在IE開發工具的頭。如果我將這個modernizr調用放在body中,生成的腳本會出現在body中。
但問題似乎是插件腳本被放置在之前 jquery腳本。該插件需要jquery才能工作。儘管我在標記中的jquery腳本標記之後編寫了modernizr腳本標記,但是在jquery腳本之前將備用「nope」腳本注入到頁面中。咦?
我仍在適應異步的工作。有人可以解釋如何解決這個問題嗎? (我總是需要調用反正jQuery的對頁面上的其他元素,所以我真的不能做任何Modernizr的測試加載jQuery的條件。)
UPDATE
好了,現在我(試圖)以異步方式調用一切。在頭部的腳本標籤聲明如下:
<script src="js/modernizr-columntest.js"></script>
<script src="js/envision-scriptloader.js"></script>
的scriptloader文件包含此:
Modernizr.load([
'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
{
test: Modernizr.csscolumns,
nope: 'jquery.masonry.min-pluscall.js'
},
{
load: ["js/jquery-smoothscroll.js","js/jquery.colorbox-min.js"],
complete: function() {
$.colorbox.settings.fixed = true;
// MISCELLANEOUS SETTINGS ETC
$(document).ready(function() {
$('.thumbnail').colorbox({
innerWidth: 800,
});
});
}
}
]);
但令人費解的是,磚石插件根本不會觸發。在IE 9 Dev Tools中,html檢查器中的腳本仍然以與jquery相反的順序出現。更奇怪的是,砌體腳本在生成的代碼中出現兩次,一次在jquery之前,一次在之後。 (!)它看起來像這樣在腦袋裏:
<script src="js/jquery.masonry.min-pluscall.js"></script>
<script src="js/jquery-smoothscroll.js"></script>
<script src="js/jquery.colorbox-min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="jquery.masonry.min-pluscall.js"></script>
<script src="js/modernizr-columntest.js"></script>
<script src="js/envision-scriptloader2.js"></script>
有幫助嗎?
謝謝克里斯。我想這與async完全沒有關係,如果我打算使用它,我必須將所有內容都轉換爲'modernizr.load'。一個必然的問題:關於頁面特定的內聯代碼,頁面特定的全局變量等,我該怎麼辦?有沒有「最佳做法」? – Ben 2012-07-09 20:48:11
真的很難在真實世界的場景中處理異步JS。 *我*做的不是在頁面本身上使用它,而是隻在一個JS文件中*被*同步加載。我有一個jQuery腳本標記,一個用於通用插件(組合和縮小),一個用於應用程序範圍的JS - 全部同步。然後,在應用程序範圍內的JS中,我可以通過'Modernizr.load'有條件和異步地加載其他庫,這不是問題,因爲代碼所在的文件是在jQuery之後同步加載的。 – 2012-07-09 20:59:54
好,但那正是我的問題,不是嗎?我加載jquery(同步,我想)。然後我加載了modernizr(如果我沒有弄錯的話,也可以從同步調用中調用)。所以我認爲異步加載的jquery插件會在jquery之後執行,但它在* jquery之前被注入*,因此不能運行!我會接受你的回答,我只是想了解... – Ben 2012-07-09 21:47:41