网站延迟加载对讲脚本

Posted

技术标签:

【中文标题】网站延迟加载对讲脚本【英文标题】:Delayed loading intercom script in website 【发布时间】:2019-08-16 01:54:51 【问题描述】:

我正在尝试延迟 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);

5s 后出现测试控制台日志,但没有对讲。当我不使用功能 setTimeout 对讲机开始正常。有什么想法吗?

【问题讨论】:

页面加载后能否加载脚本?一些库不能因为 document.write 或绑定到 window onload。 旁注;使用单个字符命名变量会大大降低代码的可读性和可维护性。您应该考虑自行记录您的代码的名称,并仅在投入生产时使用 uglifier 和最小化器来减小代码的大小。 您是否尝试在var l = function () 中添加setTimeout 【参考方案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);
        
    
)();

不确定您是否需要它,但将来可能会帮助某人

【讨论】:

好的,所以这主要是添加一个setTimeout(..., 5000),例如加载对讲前延迟 5 秒

以上是关于网站延迟加载对讲脚本的主要内容,如果未能解决你的问题,请参考以下文章

延迟网站页面的执行

加载后延迟加载社交脚本

图片懒加载(延迟加载)原理及实现

jQuery 2.1 |延迟功能直到手动加载外部脚本

延迟 jquery 脚本,直到其他所有内容都已加载

js图片延迟加载