#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-секундную задержку перед загрузкой внутренней связи