Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免google analytics在脱机时延迟加载事件侦听器_Javascript_Html_Google Analytics - Fatal编程技术网

Javascript 如何避免google analytics在脱机时延迟加载事件侦听器

Javascript 如何避免google analytics在脱机时延迟加载事件侦听器,javascript,html,google-analytics,Javascript,Html,Google Analytics,我有一个可以在线和离线使用的应用程序。我已经在主体中包含了GA,并启用了async。我还有一些处理DOM的核心函数,这些DOM与窗口上的加载事件侦听器关联。当系统未连接时,ga.js文件会花费大量时间尝试加载。这可防止load事件触发。那么我怎样才能避免这种情况呢?我可以使用DOMContentLoaded,但那是一样的,因为js文件包含在DOM内容中。试试看 我们允许ga正常加载 我们将对ga dom元素的引用存储在全局变量(gaClone)中 我们设定了30秒的超时时间。我们还设置了另一个全

我有一个可以在线和离线使用的应用程序。我已经在主体中包含了GA,并启用了async。我还有一些处理DOM的核心函数,这些DOM与
窗口上的
加载
事件侦听器关联。当系统未连接时,ga.js文件会花费大量时间尝试加载。这可防止
load
事件触发。那么我怎样才能避免这种情况呢?我可以使用
DOMContentLoaded
,但那是一样的,因为js文件包含在DOM内容中。

试试看

  • 我们允许ga正常加载
  • 我们将对ga dom元素的引用存储在全局变量(gaClone)中
  • 我们设定了30秒的超时时间。我们还设置了另一个全局变量(loadedGoogleAnalytics),并最初将其设置为0。当ga加载时,我们将该变量设置为1。在超时到期时,我们检查是否加载了ga。如果没有,我们将删除dom元素ga

    <script type="text/javascript">
        var loadedGoogleAnalytics = 0;
        var gaClone;
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-123456789-1']);
        _gaq.push(['_trackPageview']);
    
        _gaq.push(function() {
            loadedGoogleAnalytics = 1;
            //console.log('GA Actualy executed!');
        });
    
        (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    
            gaClone = ga;
    
        })();
    
        setTimeout(function() {
            //console.log('timeout fired');
            if (loadedGoogleAnalytics != 1) {
                gaClone.parentNode.removeChild(gaClone); 
            }
        }, 30000);
    </script>
    
    
    var loadedGoogleAnalytics=0;
    var-gaClone;
    var _gaq=_gaq | |[];
    _gaq.push([''设置帐户','UA-123456789-1']);
    _gaq.push([''u trackPageview']);
    _gaq.push(函数(){
    loadedGoogleAnalytics=1;
    //log('GA实际执行!');
    });
    (功能(){
    var ga=document.createElement('script');ga.type='text/javascript';ga.async=true;
    ga.src=('https:'==document.location.protocol?'https://ssl' : 'http://www“)+”.google analytics.com/ga.js';
    var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(ga,s);
    gaClone=ga;
    })();
    setTimeout(函数(){
    //log('timeout-fired');
    如果(loadedGoogleAnalytics!=1){
    gaClone.parentNode.removeChild(gaClone);
    }
    }, 30000);
    
  • 试试这个

  • 我们允许ga正常加载
  • 我们将对ga dom元素的引用存储在全局变量(gaClone)中
  • 我们设定了30秒的超时时间。我们还设置了另一个全局变量(loadedGoogleAnalytics),并最初将其设置为0。当ga加载时,我们将该变量设置为1。在超时到期时,我们检查是否加载了ga。如果没有,我们将删除dom元素ga

    <script type="text/javascript">
        var loadedGoogleAnalytics = 0;
        var gaClone;
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-123456789-1']);
        _gaq.push(['_trackPageview']);
    
        _gaq.push(function() {
            loadedGoogleAnalytics = 1;
            //console.log('GA Actualy executed!');
        });
    
        (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    
            gaClone = ga;
    
        })();
    
        setTimeout(function() {
            //console.log('timeout fired');
            if (loadedGoogleAnalytics != 1) {
                gaClone.parentNode.removeChild(gaClone); 
            }
        }, 30000);
    </script>
    
    
    var loadedGoogleAnalytics=0;
    var-gaClone;
    var _gaq=_gaq | |[];
    _gaq.push([''设置帐户','UA-123456789-1']);
    _gaq.push([''u trackPageview']);
    _gaq.push(函数(){
    loadedGoogleAnalytics=1;
    //log('GA实际执行!');
    });
    (功能(){
    var ga=document.createElement('script');ga.type='text/javascript';ga.async=true;
    ga.src=('https:'==document.location.protocol?'https://ssl' : 'http://www“)+”.google analytics.com/ga.js';
    var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(ga,s);
    gaClone=ga;
    })();
    setTimeout(函数(){
    //log('timeout-fired');
    如果(loadedGoogleAnalytics!=1){
    gaClone.parentNode.removeChild(gaClone);
    }
    }, 30000);
    

  • 但这意味着该应用程序仍将暂停30秒。30秒太长了。我认为让用户等待30秒是不好的,因为他/她处于脱机状态。如果我们减少这个数量,那么我们就有可能删除一个有效的(尽管很慢)gs.js负载。是否有任何方法可以使ga.js不包含在要触发的加载事件中,但这意味着应用程序仍将暂停30秒。30秒太长了。我认为让用户等待30秒是不好的,因为他/她处于脱机状态。如果我们减少这个数量,那么我们就有可能删除一个有效的(尽管很慢)gs.js负载。是否有任何方法使ga.js不被包括在要触发的加载事件中?可能重复的可能重复的