Можно ли предположить, что DOM еще не готов для динамически загружаемого JS-скрипта? - PullRequest
0 голосов
/ 20 февраля 2009

Я написал внешний скрипт, который должен запускаться после того, как DOM будет готов (или после загрузки, если это невозможно).

Я использую этот метод для динамической загрузки скрипта, так как мне нужны параметры скрипта:

<script type="text/javascript">
document.write(unescape("%3Cscript src='mydomain.com/script.js.php?u="+encodeURIComponent(window.location.host)+"' type='text/javascript'%3E%3C/script%3E"));
</script>

Чтобы вовремя запустить скрипт, я использую кросс-браузерные методы, чтобы прикрепить события dom ready или onload.

Мой вопрос: Могу ли я предположить, что DOM готов, когда мой скрипт запускается и запускает мой скрипт немедленно, или что DOM не готов, и присоединяется к событию DOM ready (ИЛИ загрузка документа)?

Если я тоже не могу предположить наверняка, мой вопрос заключается в том, как я могу определить, готов ли DOM (в разных браузерах), когда мой скрипт выполняется? В этом случае методы запуска сценария на DOM ready или события загрузки документа не будут работать, поскольку события уже были запущены.

Примечания: 1. У меня нет контроля над веб-сайтами, к которым будет прикреплен скрипт. 2. Не могу использовать Jquery или другую библиотеку.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2009

Вы можете быть почти уверены, что дом еще не готов.

Этот является хорошим справочником, чтобы заставить работать так, как вы хотите.

Я бы либо:

1) Динамически загружайте этот скрипт, а затем присоединяйте функцию к onload, даже чтобы вызывать / делать что хотите с этим удаленным сайтом .js.

2) Загружать скрипт только после того, как DOM будет готов.

0 голосов
/ 20 февраля 2009

Поместите скрипт в конец body документа. Все вышеперечисленное будет доступно при вызове вашего скрипта (потому что браузер должен был проанализировать его, чтобы увидеть ваш тег скрипта; QED).

Обратите внимание, что другие ресурсы (например, изображения или кадры) все еще могут загружаться в это время.

...