我倾向于使用以下模式来检查文档是否完成加载。该函数返回一个Promise(如果您需要支持IE,则包括polyfill),该文档将在文档完成加载后解析。它setInterval
在下面使用,因为类似的实现setTimeout
可能导致非常深的堆栈。
function getDocReadyPromise()
{
function promiseDocReady(resolve)
{
function checkDocReady()
{
if (document.readyState === "complete")
{
clearInterval(intervalDocReady);
resolve();
}
}
var intervalDocReady = setInterval(checkDocReady, 10);
}
return new Promise(promiseDocReady);
}
当然,如果您不必支持IE:
const getDocReadyPromise = () =>
{
const promiseDocReady = (resolve) =>
{
const checkDocReady = () =>
((document.readyState === "complete") && (clearInterval(intervalDocReady) || resolve()));
let intervalDocReady = setInterval(checkDocReady, 10);
}
return new Promise(promiseDocReady);
}
使用该功能,您可以执行以下操作:
getDocReadyPromise().then(whatIveBeenWaitingToDo);