загрузить сценарий jQuery после завершения сценария JavaScript - PullRequest
2 голосов
/ 03 февраля 2011

Подобно тому, как jQuery загружается после загрузки документа, мне нужен определенный бит jQuery после того, как скрипт JavaScript завершил.

Я загружаю контактные данные из API данных Google, и файл div, в котором отображаются данные, должен быть полностью загружен (javascript), чтобы он был доступен для jQuery, если я прав.

Есть ли способ сделать это?

Ответы [ 4 ]

5 голосов
/ 03 февраля 2011

Допустим, вы ожидаете загрузки Google Analytics. Теперь вы знаете, что при загрузке Google Analytics _gaq будет зарегистрирован в DOM. Таким образом, за исключением всех других (лучших) асинхронных опций, вы можете создать функцию, которая ожидает существования _gaq:

waitForGaq = function(fn, attemptsLeft) {
    var tick = attemptsLeft || 30; 

    if (typeof(_gaq) != 'object' || !_gaq._getAsyncTracker) {
        //_gaq isn't registered yet
        if (tick > 1) {
            //recurse
            setTimeout(function() {
                waitForGaq(fn, tick - 1);
            }, 100)
        }
        else {
            //no ticks left, log error
            log('failed to load window.gaq');
        }
    }
    else {
        //gaq is loaded, fire fn
        fn();
    }
}

Итак, любой код должен быть запущен ПОСЛЕ регистрации _gaq, вы можете добавить на страницу таким образом:

waitForGaq(function() {
    //here's all my code...
});

Повторюсь: повторение, подобное этому, необходимо, только если добавляемый скрипт не предлагает асинхронный способ взаимодействия с библиотекой. Google Analytics, например, является своего рода спорным примером, поскольку он предлагает более чистый подход:

http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html

1 голос
/ 03 февраля 2011

Попробуйте head.js

Позволяет точно определить, когда (после конкретного скрипта или после того, как все они были загружены) вы хотите выполнить определенный фрагмент кода.

Не говоря уже о том, что оно само по себе очень аккуратно.

0 голосов
/ 03 февраля 2011

если я правильно понимаю, вы хотите сделать что-то вроде:

<script>
// your javascript code
</script>
<script>
//your jquery code
</script>
0 голосов
/ 03 февраля 2011

вставьте тег сразу после оригинала с кодом jQuery, который вам нужно запустить

<script src="foo" id="bar">

$("#bar").after(
    $("<script>").text("some code")
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...