document.getElementById('cards').innerHTML = ...
Если этот элемент еще не загружен, то вы получите ошибку
Cannot set property 'innerHTML' of null
, логично.
Если все уже загружено, и
после этого вы добавляете обработчик window.onload, то он никогда не сработает, т.к. это событие уже произошло.