Лучший способ сообщить, что мой JS-скрипт загружен - PullRequest
3 голосов
/ 24 февраля 2009

У меня есть JS-скрипт, который будет размещен на моем сервере и который другие будут вставлять в свои html, т.е.

...<code for http://yoursite.com />
<script type="text/javascript" src="http://mysite.com/awesome.js" />
...<code for http://yoursite.com />

Мой сценарий объявляет объект с набором свойств, доступных для использования в качестве javascript Object (), т.е.

<script type="text/javascript">
//From http://mysite.com/awesome.js
alert(Awesome.Name);
</script>

Из-за дисперсии времени загрузки мне кажется, что мне нужно сигнализировать, что объект "Awesome" в моем скрипте готов. Мне нужно, чтобы это стояло само по себе, поэтому никаких зависимостей от конкретных структур JS.

Нужно ли публиковать свое собственное пользовательское событие JS, или простой факт, что мой скрипт загружен, фиксируется одним из существующих событий уровня страницы? Как еще я должен это делать?

ОБНОВЛЕНИЕ: в качестве ориентира, если я включу JS в страницу HTML, работающую с "http://mysite.com",, объект Awesome будет доступен и заполнен. Когда файл JS включен из другого домена, объект не определено во время выполнения.

Ответы [ 5 ]

5 голосов
/ 24 февраля 2009

Содержимое javascript тегов <script> выполняется процедурно, поэтому это

<script type="text/javascript" src="http://mysite.com/awesome.js" />
<script type="text/javascript">
    alert(Awesome.Name);
</script>

будет оповещать только содержимое Awesome.Name, если оно найдено в любом предыдущем теге сценария.

Чтобы понять, полностью ли все загружено на странице, вы должны использовать DOMContentLoaded для firefox и "onreadystatechange" для ie. Также вы можете просто проверить событие load на объекте window , если вам не нужна проверка DOM (может быть проще).

if ( document.addEventListener ) {
    document.addEventListener( "DOMContentLoaded", function(){
         doSomething();   
    }, false );
} else if ( document.attachEvent ) { // IE        
    document.attachEvent("onreadystatechange", function(){
        if ( document.readyState === "complete" ) {
            doSomething();
        }
    });
}
1 голос
/ 02 июня 2009

Ко всему доступному в глобальной области можно получить доступ через область window. Следовательно, вы можете использовать это:

if (window["Awesome"] != null) { /* do something */ }
1 голос
/ 24 февраля 2009

Если вашему сценарию требуется загрузить DOM до того, как будет создан экземпляр вашего объекта, вы должны взглянуть на некоторые фреймворки и посмотреть, как они это обрабатывают, а затем внедрить его в свой код. Если вам не нужно загружать DOM, я бы позволил пользователю беспокоиться о сроках использования вашего объекта в зависимости от того, когда он загружен. Как правило, ваш объект должен быть доступен для использования, как только ваш скрипт будет загружен, а это значит, что объект должен быть доступен сразу после включенного в него тега script.

0 голосов
/ 01 июня 2012

вы можете просто использовать его так:

<script type="text/javascript" src="myfunction.js"></script>
<script type="text/javascript" src="iwannaloadthis.js?onload=executeThis"></script>

Помните, как указано ранее, выполнить это должно быть определено в myfunction.js (или перед попыткой загрузки iwannaloadthis.js.

Надеюсь, это поможет !!

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

A). Вы понимаете, что запросы скриптов блокируются? Вы согласны с этим или хотите обойти это, потому что от этого зависит ответ на ваш вопрос.

В). Пуленепробиваемый и простой механизм Bare Bones - это вызов определенного метода, который, как вы можете гарантировать, существует на странице. Пусть реализация этих методов будет зависеть от того, что пользователь сделает. Существует множество других способов, но нам нужно знать, каков именно жизненный цикл и цель вашего кода, чтобы что-то рекомендовать.

...