我知道,这里有很多关于它的回答问题。不过,我的情况有点不同,我还没有找到答案。
我试图在页面完全加载后显示一条消息。使用$(document).ready, document.readyStateChange
,我不在乎。
问题是文档在需要执行的脚本中间准备好。我尝试过使用window.onload
(它与 jQuery 等效),但它在一些图像/元素出现之前向我显示了消息。有没有办法等待它执行然后才显示消息?(请记住,我可能需要在同一页面中执行多次)。
提前致谢!
我知道,这里有很多关于它的回答问题。不过,我的情况有点不同,我还没有找到答案。
我试图在页面完全加载后显示一条消息。使用$(document).ready, document.readyStateChange
,我不在乎。
问题是文档在需要执行的脚本中间准备好。我尝试过使用window.onload
(它与 jQuery 等效),但它在一些图像/元素出现之前向我显示了消息。有没有办法等待它执行然后才显示消息?(请记住,我可能需要在同一页面中执行多次)。
提前致谢!
听起来您需要让代码作为必须首先执行的任何脚本的回调运行,而不是将其绑定到document.ready
事件。如果您可以发布一些代码,我可能会提供更多帮助。
bianca,为什么不尝试从需要运行的脚本中加载消息呢?在脚本末尾触发消息,以便您知道需要运行的脚本已完成。
Javascript 按照编写的顺序执行。我猜你当前的代码在加载 HTML 之后运行(即 window.onload),如果你的消息是你的 Javascript 中调用的最后一件事。
唯一的例外是,如果您执行异步 XMLHttpRequest 调用,那么您将希望有一个设置为“false”的变量,并且当 XMLHttpRequest 完成时将该变量设置为“true”。然后,您可以使用 setTimeout 来监听该变量何时为真。
window.onload
是解决方案。window.onload
当 DOM 准备好并且所有资源也加载到浏览器中时触发。换句话说,它会在浏览器的圆圈停止旋转时触发。
确保页面真正完成加载并不总是一件容易的事。特别是对于通过 Ajax 依赖内容的页面,以及异步加载的其他资产(每个资产都可以独立加载并与其他资产并行加载,例如图像)。
创建一些全局 Deferred 对象(一个 Promise)并确保只有在它所依赖的所有内容都“准备好”后才会解决它。
// start your web app code..
var p1 = new Promise();
var p2 = new Promise();
var p3 = new Promise();
// when all dependencies are done loading, means the page is truly "ready"
Promise.all([p1, p2, p3])
.then(() => {
// page done loading
});
// somewhere in the code...wait for Ajax content to load
// and resolve "p1" after the content has loaded
p1.resolve();
// somewhere in the code...wait for some other Ajax content to load
// and resolve "p2" after the content has loaded
p2.resolve();
// somewhere in the code...wait for all the images to load
// (http://stackoverflow.com/a/1977898/104380)
// and resolve "p3"
p3.resolve();
关键是您需要手动确保所有异步的不同部分都已完全加载。这是一项乏味的工作,但它是一个非常可靠的解决方案。