Задержка загрузки скрипта внутренней связи на веб-сайте

#javascript #jquery #html #dom #intercom

#javascript #jquery #HTML #dom #внутренняя связь

Вопрос:

Я пытаюсь загрузить скрипт внутренней связи с задержкой в 5 секунд.

Я пытаюсь использовать функцию setTimeout, но тогда внутренняя связь не запускается

 setTimeout(function () {
    function inter() {
        var w = window;
        var ic = w.Intercom;
        if (typeof ic === "function") {
            ic('reattach_activator');
            ic('update', w.intercomSettings);
        } else {
            var d = document;
            var i = function () {
                i.c(arguments);
            };
            i.q = [];
            i.c = function (args) {
                i.q.push(args);
            };
            w.Intercom = i;
            var l = function () {
                var s = d.createElement('script');
                s.type = 'text/javascript';
                s.async = true;
                s.src = 'https://widget.intercom.io/widget/my_id';
                var x = d.getElementsByTagName('script')[0];
                x.parentNode.insertBefore(s, x);
            };
            if (w.attachEvent) {
                w.attachEvent('onload', l);
            } else {
                w.addEventListener('load', l, false);
            }
        }
        console.log("test")
    };

    inter();
}, 5000);
  

Журнал тестирования консоли появляется через 5 секунд, но внутренней связи нет. Когда я не использую функцию setTimeout, интерфейс запускается нормально. Есть идеи?

Комментарии:

1. Может ли скрипт быть загружен после загрузки страницы? Некоторые библиотеки не могут из-за document.write или привязки к загрузке окна.

2. Дополнительное замечание; именование переменных одним символом значительно снижает читаемость и ремонтопригодность вашего кода. Вам следует рассмотреть имена, которые самостоятельно документируют ваш код, и использовать uglifier и minimizer для уменьшения размера вашего кода только тогда, когда он запускается в производство.

3. Вы пытались поместить setTimeout внутрь var l = function () {

Ответ №1:

попробуйте это

 <script>
(function () {
    var w = window;
    var ic = w.Intercom;
    if (typeof ic === "function") {
        ic('reattach_activator');
        ic('update', w.intercomSettings);
    } else {
        var d = document;
        var i = function () {
            i.c(arguments);
        };
        i.q = [];
        i.c = function (args) {
            i.q.push(args);
        };
        w.Intercom = i;
        var l = function () {
            setTimeout(function () {
                var s = d.createElement('script');
                s.type = 'text/javascript';
                s.async = true;
                s.src = 'https://widget.intercom.io/widget/yourID';
                var x = d.getElementsByTagName('script')[0];
                x.parentNode.insertBefore(s, x);
            }, 5000);
        };
        if (w.attachEvent) {
            w.attachEvent('onload', l);
        } else {
            w.addEventListener('load', l, false);
        }
    }
})();
  

Не уверен, что вам это больше нужно, но может помочь кому-нибудь в будущем

Комментарии:

1. хорошо, это в основном добавляет setTimeout(..., 5000) , например, 5-секундную задержку перед загрузкой внутренней связи