La forma cross-browser para comprobar si el documento se ha cargado en JavaScript puro utiliza readyState.

if (document.readyState === 'complete') {
  // The page is fully loaded
}

Como detectar cuando el document esta listo…

let stateCheck = setInterval(() => {
  if (document.readyState === 'complete') {
    clearInterval(stateCheck);
    // document ready
  }
}, 100);

o con onreadystatechange

document.onreadystatechange = () => {
  if (document.readyState === 'complete') {
    // document ready
  }
};

Use document.readyState === 'interactive' para detectar cuando el DOM esta listo.