@cloudz

Как вызвать функцию после полной загрузки асинхронного скрипта?

Всем привет.
На странице загружается скрипт, который генерирует счетчики матрик и вставляет их на страницу.

addMetric('YM', 123456789);
function addMetric(type, counterID){
        switch (type) {
            case 'YM':
                if (counterID !== null) {
                    var scriptYM = '(function (d, w, c){(w[c] = w[c] || []).push(function() {try {w.yaCounter' + counterID + ' = new Ya.Metrika({  id:' + counterID + ', clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true});} catch(e) { }}); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = "https://mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") {d.addEventListener("DOMContentLoaded", f, false);} else { f(); }})(document, window, "yandex_metrika_callbacks");';
                    var createYM = document.createElement('script');
                    createYM.innerHTML = scriptYM;
                    document.body.appendChild(createYM);
                }break;
        }
    }


Дальше в скрипте происходит сохранение cookie которые разместит собранный счетчик.
Взникла проблема: если установленный счетчик не успел поставить куки, поскольку он работает асинхронно, в основном скрипте ничего не запишется, хотя спустя несколько секунд куки появятся.

Так вот вопрос.
Как вызвать функцию из основного скрипта, только после того как завершиться асинхронный скрипт, при этом не тормозя всякими таймаутами? как проконтролировать что куки поставлены и только потом их пробовать сохранять
  • Вопрос задан
  • 808 просмотров
Решения вопроса 1
lazalu68
@lazalu68
Salmon
Стоило заглянуть в документацию, это второй пункт в соответствующем разделе.

При инициализации счетчика выбираете опцию triggerEvent:

var yaCounterXXXXXX = new Ya.Metrika({
    id: XXXXXX,
    triggerEvent: true
});


После этого в коде можете вешать обработчик, который будет вызван когда счетчик инициализируется:

document.addEventListener('yacounterXXXXXinited', function () {
    console.log('the yaCounterXXXXX counter can be used');
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@fomenko_alexandr
В тот же (асинхронный) скрипт писать код.
Или загружать синхронно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы