我已经有了根据请求延迟加载脚本的代码。我现在的问题是等待执行某些代码,直到对象可用。我不能使用 setTimeout(),因为它不会阻止执行。
那么在不锁定浏览器的情况下“等待”加载的好方法是什么?
同样,不能使用原始 setTimeout()。
最佳答案
假设您控制脚本的内容,您可以在延迟加载脚本的底部放置一些要执行的代码,以向主页指示脚本已加载。例如,在您的页面中,您可以执行以下操作:
var loadingScripts = 0;
var loadScript = function() {
// Do what you need to do to load the script...
loadingScripts++;
}
var loadedScript = function() {
loadingScripts--;
if (loadingScripts == 0) {
// Kick off execution of code that requires the lazy loaded scripts.
}
}
然后在您的脚本中,将此代码添加到底部:
loadedScript();
您可以使用数组而不是整数来为这个示例增添趣味(以跟踪加载了哪些特定脚本)。您也可以使用对象来将特定函数调用与特定脚本的完成相关联。我的示例保持简单,但询问您是否希望我展示如何扩展代码。
这里介绍了如何在加载脚本后使用回调继续执行特定代码(再次假设您控制脚本本身)。
var scriptCallbacks = {}
var loadScript = function(scriptname, callback) {
// Do what you need to load scriptname
scriptCallbacks[scriptname] = callback;
}
var loadedScript = function(scriptname) {
(scriptCallbacks[scriptname])();
}
然后当你想加载一个脚本时,你可以做这样的事情......
var callback = function() {
// Write exactly what you want executed once your script is loaded
}
loadScript("MyScript.js", callback);
同样,在您的延迟加载脚本中,只需将此代码添加到底部以通知您的回调触发:
loadedScript("MyScript.js");
关于javascript - 在没有锁定的情况下等待延迟加载的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903012/