功能检测支持DOMContentLoaded事件
Feature detect support for DOMContentLoaded event
是否可以检测到对DOMContentLoaded
事件的支持?
方法类似于Kangax的解决方案,因为DOMContentLoaded
没有作为任何元素的属性公开:在没有浏览器嗅探的情况下检测事件支持
只需监听所有三个事件,第一个事件就会触发胜利。如果获胜者是DOMContentLoaded,则支持它。如果在其他两个中的一个被触发时它还没有被触发,那么它就不受支持。
<script>
var hasDOMContentLoaded = false,
ready = false,
readyMethod = null;
// Listen for "DOMContentLoaded"
document.addEventListener("DOMContentLoaded", function(event) {
hasDOMContentLoaded = true;
init("DOMContentLoaded");
});
// Listen for "onreadystatechange"
document.onreadystatechange = function () { init("onreadystatechange"); }
// Listen for "load"
document.addEventListener("load", function(event) { init("load"); });
// Gets called after any one of the above is triggered.
function init(method) {
if(!ready) {
ready = true;
readyMethod = method;
go();
}
}
// Page is ready, time is up.
// Eitehr DOMContentLoaded has been triggered or it never will.
function go() {
console.log("hasDOMContentLoaded: ", hasDOMContentLoaded);
// My initialization code here
}
</script>
实际上&实际上,不需要DOMContentLoaded事件。由于HTML流加载的原理,任何脚本都可以用来确定文档HTML是否被完全解析。
您所要做的就是将函数(否则会分配给DOMContentLoaded事件)放在文档的结束标记之前。
它将在最后一个HTML元素被解析为DOM之后执行,并且它将比内置的DOMContentLoaded执行得更快、更早。
我发现以下关于mozilla开发人员站点中DOMContentLoaded事件用法的解释非常有用。最后,它谈到了实现相同目标的向后兼容方法,我在这里提取了这些方法(毫不奇怪,它专注于IE)。。。
Internet Explorer 8支持readystatechange事件,该事件可以用于检测DOM何时就绪。在早期版本的Internet中Explorer,可以通过重复尝试执行来检测此状态document.dococumentElement.doScroll("left");,因为这个片段会抛出一个错误,直到DOM准备好。
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- ng更改事件不适用于Dropdown