我有个问题。我的一个JS脚本需要Facebook SDK和Twitter widgets JS首先加载。Facebook创建FB
对象,Twitter创建twttr
对象。它们都是在我的脚本触发后创建这些对象的,即使它们是从<head>
加载的。
我认为解决方案是定期检查是否定义了FB和twttr,然后继续执行我的脚本。但我不知道该怎么做。
我试着创建一个循环
while (typeof FB === 'undefined' || typeof twttr === 'undefined' || typeof twttr.widgets === 'undefined') {
// run timeout for 100 ms with noop inside
}
但这显然是行不通的,因为它一直高速触发超时,页面挂起。
请帮帮我,因为这个问题我睡不着觉。
发布于 2011-12-24 00:47:02
你把你的脚本放在页面加载时执行了吗?(即body onload="do_this ();"
)
这将使您的代码在加载完所有外部资源后执行。
关于setTimeout的使用
setTimeout
会立即返回,如果你想等待某个变量被定义,可以使用下面的代码。
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);
});
发布于 2018-08-20 19:31:38
const checkIfLoaded = ('lib', cb) => {
const interval = setInterval(() => {
if (lib) {
typeof cb === 'function' && cb();
clearInterval(interval);
} else {
console.log('not yet');
}
}, 100);
}
发布于 2011-12-24 00:50:14
如果Facebook脚本是异步加载的,那么Facebook有一种支持的方法,可以在加载库时执行代码,这应该比轮询效率高得多。请参阅此答案以获取示例:https://stackoverflow.com/a/5336483/816620。
如果Facebook脚本是同步加载的,那么您不必等待它们-它们将在运行任何其他脚本之前加载。
https://stackoverflow.com/questions/8618464
复制相似问题