首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何等待另一个JS加载后再继续操作?

如何等待另一个JS加载后再继续操作?
EN

Stack Overflow用户
提问于 2011-12-24 00:39:37
回答 3查看 42.5K关注 0票数 28

我有个问题。我的一个JS脚本需要Facebook SDK和Twitter widgets JS首先加载。Facebook创建FB对象,Twitter创建twttr对象。它们都是在我的脚本触发后创建这些对象的,即使它们是从<head>加载的。

我认为解决方案是定期检查是否定义了FB和twttr,然后继续执行我的脚本。但我不知道该怎么做。

我试着创建一个循环

代码语言:javascript
复制
while (typeof FB === 'undefined' || typeof twttr === 'undefined' || typeof twttr.widgets === 'undefined') {
    // run timeout for 100 ms with noop inside
}

但这显然是行不通的,因为它一直高速触发超时,页面挂起。

请帮帮我,因为这个问题我睡不着觉。

EN

回答 3

Stack Overflow用户

发布于 2011-12-24 00:47:02

你把你的脚本放在页面加载时执行了吗?(即body onload="do_this ();")

这将使您的代码在加载完所有外部资源后执行。

关于setTimeout的使用

setTimeout会立即返回,如果你想等待某个变量被定义,可以使用下面的代码。

代码语言:javascript
复制
function when_external_loaded (callback) {
  if (typeof FB === 'undefined' || typeof twtter === 'undefined') {
    setTimeout (function () {
       when_external_loaded (callback);
    }, 100); // wait 100 ms
  } else { callback (); }
}

...

when_external_loaded (function () {
    alert (FB);
    alert (twtter);
});
票数 8
EN

Stack Overflow用户

发布于 2018-08-20 19:31:38

代码语言:javascript
复制
const checkIfLoaded = ('lib', cb) => {
  const interval = setInterval(() => {
    if (lib) {
      typeof cb === 'function' && cb();
      clearInterval(interval);
    } else {
      console.log('not yet');
    }
  }, 100);
}

票数 2
EN

Stack Overflow用户

发布于 2011-12-24 00:50:14

如果Facebook脚本是异步加载的,那么Facebook有一种支持的方法,可以在加载库时执行代码,这应该比轮询效率高得多。请参阅此答案以获取示例:https://stackoverflow.com/a/5336483/816620

如果Facebook脚本是同步加载的,那么您不必等待它们-它们将在运行任何其他脚本之前加载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8618464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档