Можно ли доверять script.readyState для определения окончания динамической загрузки скрипта?

Попытка подключения к localhost:

SQLSTATE[HY000] [2002] No such file or directory

Попытка подключения к 127.0.0.1:

SQLSTATE[HY000] [2002] Connection refused

OK, просто комментируйте / удаляйте следующую настройку из my.cnf (на OS X 10.5: /opt/local/etc/mysqlxx/my.cnf), чтобы получить:

[mysqld]
# skip-networking

Конечно, остановите и запустите MySQL Server.

30
задан 5 revs, 4 users 62% 30 May 2013 в 08:55
поделиться

3 ответа

В Opera свойству script.readyState нельзя доверять. Например, readyState "loaded" может быть запущено до запуска сценария в 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, и его не следует устанавливать в другие браузеры.

это означает, что этому значению нельзя доверять для определения конца загрузки скрипта:

# 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, и его не следует устанавливать в другие браузеры.

это означает, что этому значению нельзя доверять для определения конца загрузки скрипта:

# 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, и его не следует устанавливать в другие браузеры.

но оба раза после запуска сценария:

# 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, и его не следует устанавливать в другие браузеры.

но оба раза после запуска сценария:

# 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, и его не следует устанавливать в другие браузеры.

8
ответ дан 27 November 2019 в 22:51
поделиться

В Firefox, Safari и Chrome никогда не вызывается обработчик onreadystatechange.

Я создал короткий тестовый пример, создав динамический скрипт только с установленным обработчиком onreadystatechange:

<script type="text/javascript" language="javascript">
bezen.log.info(new Date(),true);
bezen.log.info(navigator.userAgent,true);

// Activate logs
bezen.log.on();
bezen.log.info('Test for script.readyState behavior started');

var script = document.createElement('script');
script.src = 'test1.js';
script.onreadystatechange = function(){
  bezen.log.info('readystatechange: '+script.readyState);
};
document.body.appendChild(script);
bezen.log.info('Added script with onreadystatechange handler');
</script>

Я выполнил тест на локальном файле в Firefox 2, Firefox 3, Firefox 3.5, Safari 3, Safari 4 и Chrome 3 и получили аналогичные результаты (здесь журналы, записанные в FF 3.5):

Fri Dec 18 2009 17:53:58 GMT+0100
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6
Test for script.readyState behavior started
Added script with onreadystatechange handler
test1.js: Start
test1.js: Start of closure
test1.js: End of closure

onreadystatechange никогда не вызывается. В этих браузерах только прослушиватель onload полезен для определения конца загрузки скрипта, onreadystatechange не требуется.

4
ответ дан 27 November 2019 в 22:51
поделиться

В Internet Explorer обработчик onreadystatechange запускается, как и ожидалось, после завершения сценария.

Я выполнил тот же тест в Internet Explorer 6, Internet Explorer 7 и Internet Explorer 8 с аналогичными результаты в этих трех браузерах (здесь журналы, записанные в Internet Explorer 6):

Fri Dec 18 18:14:51 UTC+0100 2009
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
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: complete

Здесь, при тесте с использованием локального файла, readyState всегда является "завершенным", и оно остается таким же после нескольких обновлений страницы.

] Однако, как отмечено в этой публикации Николаса Закаса , вы также можете наблюдать «загружено» и «завершено» или просто «загружено» при различных обстоятельствах.

1
ответ дан 27 November 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: