Nic*_*las 45 javascript asynchronous dom-events
我正在写一个Javascript脚本.此脚本可能会异步加载(AMD格式).
在这个脚本中,在window.load事件被触发之前,我不想做任何重要事情.所以我听窗口"加载"事件.
但是如果在window.load事件之后加载脚本......我怎么知道window.load已经被触发了?
当然我不想在任何其他脚本中添加内容(它们都是异步加载,问题是一样的):)
编辑:
想象一下,根本没有Javascript的HTML文档.
有人在此doc中插入一个标记,并且此脚本标记加载我的Javascript文件.
这将执行我的脚本.
这个脚本如何知道window.load是否已被触发?
我之前没有jQuery,也没有HTML文档中的任何脚本.
有可能知道??
我找到了window.document.readystate属性.此属性用于文档"就绪"事件我gess,而不是窗口"加载".窗口"加载"事件有什么类似的吗?
Mat*_*sel 48
最简单的解决方案可能是检查document.readyState == 'complete',请参阅http://www.w3schools.com/jsref/prop_doc_readystate.asp
CTS*_*_AE 16
快速回答问题的标题:
document.readyState === 'complete'
Run Code Online (Sandbox Code Playgroud)
如果您想在加载窗口时调用代码,同时仍处理在代码运行时窗口可能已经加载的情况,下面是一个很好的帮助。
document.readyState === 'complete'
Run Code Online (Sandbox Code Playgroud)
注意:此处的代码段实际上不在同一窗口上下文中运行,因此document.readyState === 'complete'实际评估的时间是false您运行该代码段的时间。如果您现在立即在此窗口中将其放入控制台,则应评估为true。
另请参阅:'$(document).ready()'的非jQuery等效项是什么?
Evg*_*eny 14
浏览器导航性能loadEventEnd 指标可用于确定是否触发了加载事件:
let navData = window.performance.getEntriesByType("navigation");
if (navData.length > 0 && navData[0].loadEventEnd > 0)
{
console.log('Document is loaded');
} else {
console.log('Document is not loaded');
}
Run Code Online (Sandbox Code Playgroud)