0

我以前遇到过这种情况几次,总是找到一种棘手的方法来使它工作,但我想知道是否有最佳实践:有时你必须在页面示例上使用多个 javascript SDK:谷歌jsapi 和 jQuery。

当 SDK 可以使用时,Google 会调用此函数:

google.setOnLoadCallback(MyFunction);

jQuery 在这个回调中做所有事情:

document.ready();

如果我想在 Google 回调之后使用 jQuery 操作 dom 怎么办。告诉浏览器的最佳方式是什么:“等待 jQuery 和 Google 准备好并做这些事情......” 最好将 jQuery 回调嵌套在 google 回调中吗?还是反过来?我有点困惑。谢谢!

4

2 回答 2

0

我建议您使用一些 AMD 工具,例如RequireJS。RequireJS 是一个 JavaScript 文件和模块加载器,它非常适合依赖管理。在您的特定情况下(使用一些传统/旧版“浏览器全局”脚本),您应该另外使用Shim Config

刚开始使用 AMD 有点棘手,但当你习惯它时,它会带来很大的好处。它将提高代码的速度和质量。

于 2012-08-13T17:52:54.290 回答
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)){
    ...
    ...
  }
}
于 2012-08-13T17:37:51.113 回答