В Opera свойству script.readyState нельзя доверять. Например, «загруженный» readyState может быть запущен до запуска скрипта в Opera 9.64.
Я выполнил тот же тест в Opera 9.64 и Opera 10, с разными результатами.
В Opera 9.64 обработчик onreadystatechange запускается дважды, один раз до и один раз после запуска скрипта. Свойство readyState «загружено» в обоих случаях, что означает, что этому значению нельзя доверять для определения окончания загрузки скрипта:
# Fri Dec 18 2009 17:54:43 GMT+0100
# Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1
Test for script.readyState behavior started
Added script with onreadystatechange handler
readystatechange: loaded
test1.js: Start
test1.js: Start of closure
test1.js: End of closure
readystatechange: loaded
В Opera 10 обработчик onreadystatechange по-прежнему запускается дважды со значением «загружен», но оба раза после запуска сценария:
# Fri Dec 18 2009 18:09:58 GMT+0100
# Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10
Test for script.readyState behavior started
Added script with onreadystatechange handler
test1.js: Start
test1.js: Start of closure
test1.js: End of closure
readystatechange: loaded
readystatechange: loaded
Это различное поведение указывает на то, что onreadystatechange не является надежным способом определения окончания загрузки скрипта в Opera. Поскольку Opera также поддерживает прослушиватель onload, вместо этого следует использовать этот другой механизм.
На основании результатов этих тестов onreadystatechange следует использовать только для определения окончания загрузки скрипта в Internet Explorer и не устанавливать в других браузерах.