Я унаследовал этот фрагмент кода, и он кажется неоптимальным и, возможно, неправильным, поскольку он добавляет прослушиватели событий как к объектам окна, так и к объектам документа. Тем не менее, он работает правильно, за исключением BlackBerry 5.0. Может ли кто-нибудь объяснить, правильно ли все это настроено или есть какие-либо рекомендации, чтобы сделать это лучше и/или более упорядоченным?
if (document.readyState === "complete")
callback();
else if (document.addEventListener)
{
document.addEventListener("DOMContentLoaded",callback,false);
window.addEventListener("load",callback,false);
}
else if(window.attachEvent)
{
document.attachEvent("onreadystatechange", callback);
window.attachEvent("onLoad",callback);
} else
setTimeout(callback,2000);
DOMContentLoaded
или способ, который я предложил, потому что выполнение этого async. script может произойти после того, как это событие сработает или HTML-Parser достигнет нижней части html-файла. Поэтому можно использовать толькоwindow.onload
иxhr.onreadystatechange
— оба браузера совместимы. - person Saxoier   schedule 03.08.2011