Я написал один и тот же код в двух JSFiddle, и они не ведут себя одинаково:

HTML:

{amp}lt;p id='complete'{amp}gt;{amp}lt;/p{amp}gt; 

JS:

 document.onreadystatechange=fnStartInit; function fnStartInit() { var state = document.readyState if (document.readyState === 'complete') { document.getElementById('complete').innerHTML = 'Document completely loaded' } } 

Работающий JSFiddle: https://jsfiddle.net/Imabot/toujsz7n/9/

Не работает JSFiddle: https://jsfiddle.net/Imabot/3sLcpa0y/7/

Почему они не ведут себя так же?

Ваша первая ссылка имеет настройку загрузки «Без переноса — нижняя часть {amp}lt;head{amp}gt; «.

введите описание изображения здесь

Это эквивалентно наличию HTML

 {amp}lt;head{amp}gt; {amp}lt;script{amp}gt; // YOUR SCRIPT HERE {amp}lt;/script{amp}gt; {amp}lt;head{amp}gt; {amp}lt;body{amp}gt; // YOUR HTML HERE {amp}lt;/body{amp}gt; 

Ваша вторая ссылка имеет настройку загрузки «On Load»:

введите описание изображения здесь

Это эквивалентно наличию HTML

 {amp}lt;head{amp}gt; {amp}lt;script{amp}gt; window.onload = function() { // YOUR SCRIPT HERE } {amp}lt;/script{amp}gt; {amp}lt;head{amp}gt; {amp}lt;body{amp}gt; // YOUR HTML HERE {amp}lt;/body{amp}gt; 

Вы можете увидеть это, если осмотрите фрейм в правом нижнем углу. Таким образом, к моменту readystatechange второго сценария readystatechange никогда не запускается снова, поэтому fnStartInit никогда не запускается.

Вот фрагмент стека, демонстрирующий ту же проблему:

 window.onload = () ={amp}gt; { console.log('onload'); document.onreadystatechange = () ={amp}gt; { console.log('ready state just changed'); }; };