Вот правильный ответ:
window.addEventListener("load", function() {
  console.log(document)
});
Суть в том что если писать так
window.onload = function() {
  console.log(document)
}
то такой вызов переопределяет значения ранее присвоенному событию. Т.е. на это событие нельзя повесить несколько обработчиков. Каждое новый обработчик будет переопределять предыдущее.
Именно поэтому у Вас оно не работало!
Надо делать только таким способом.
А все эти грамотеи которые тут советы давали, их советы не имеют силы так как они не в курсе что событие переопределяется при присвоении. 
А ведь задача ведь стоит не просто вызвать функцию при загрузке сайта, а вызвать при загрузке всех ресурсов. 
Например вызвать AJAX запрос. Какой смысл вызывать AJAX если картинки не прогрузились.  Да и вообще тормозить загрузку отображения сайта не нужно без явной причины.
Например комментарии внизу прогрузить, или подгрузить всплывающие подсказки.
Грамотеи даже не спросили у Вас, какая зависимость Вашего скрипта, и является ли критичным ожидание загрузки всех ресурсов сайта. 
document.addEventListener('DOMContentLoaded', function() {
} );
Такой способ тупо будет задерживать отображение сайта.