2012-08-13 48 views
0

我以前遇到過這種情況,並且總是發現一個棘手的方式來使它工作,但我想知道是否有最佳做法: 有時候,必須在頁面上使用多個JavaScript SDK:Google jsapi和jQuery。當SDK已經可以用於結合了不同的Javascript SDK回調的最佳實踐

谷歌調用這個函數:

google.setOnLoadCallback(MyFunction); 

的jQuery做一切在這個回調:

document.ready(); 

如果我想操作使用jQuery後谷歌在DOM回電話。 什麼是告訴瀏覽器的最佳方式:「等待jQuery和Google準備好並做好相關工作......」 最好是將jQuery回調嵌套在Google回調中?或者相反呢?我有點困惑。謝謝!

回答

0

你可以用不同的方式做到這一點,其中之一是使用全局變量;

var googleLoaded = false; 

google.setOnLoadCallback(function(){ 
    googleLoaded = true; 
    mainCallback(); 
}); 

document.ready(mainCallback); 

function mainCallback(){ 
    if(googleLoaded){ 
    ... 
    ... 
    } 
} 

作爲一個通用的解決方案,你可以做下面給出

var jsLibsToLoad = 5; 

jsLib1.onLoad(mainCallback); 
jsLib2.onLoad(mainCallback); 
jsLib3.onLoad(mainCallback); 
jsLib4.onLoad(mainCallback); 
jsLib5.onLoad(mainCallback); 

function mainCallback(){ 
    if(!(--jsLibsToLoad)){ 
    ... 
    ... 
    } 
} 
0

我會建議你使用一些AMD的工具,像RequireJS。 RequireJS是一個JavaScript文件和模塊加載器,它對於依賴性管理非常好。在你的特定情況下(使用一些傳統/傳統的「瀏覽器全局」腳本),你應該額外使用Shim Config

在開始使用AMD時有點棘手,但是當您習慣使用它時會帶來很大的好處。它會提高代碼的速度和質量。