а) Вероятно, один из компонентов страницы не прогрузился до конца.
https://learn.javascript.ru/onload-ondomcontentloaded
Есть несколько разных обработчиков, и они срабатывают на разную полноту контента страницы.
На плоскости JQuery такое же разнообразие.
front-end.su/2016/02/12/load-events
б)
if(!preloader.classList.contains('done'))
Хотите большую поддержку браузерами и с легкой руки используете свежие методы:
classList.
Разработчик обязан страдать, применяя решения и используя более устаканенные методы, если хочет широкий охват поддержки браузерами:
if(preloader.getAttribute('class').indexOf('done') == -1)
PS: Или не обязан, если подключить JQuery.)