Wystarczy posłuchać wszystkich trzech imprezach i pierwszy wywołany wygrywa. Jeśli zwycięzcą jest DOMContentLoaded, jest on obsługiwany. Jeśli nie został wyzwolony przez czas, w którym jeden z dwóch pozostałych został wywołany, nie jest obsługiwany.
<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>
Nurkowanie w coś takiego jak źródło jQuery powinno być pouczające. – Pointy
Dlaczego nie używać tabeli zgodności? – Mics
@Mics Powoduje, że wykrywanie nie wykrywa funkcji przeglądarki. –