javascript - 如何避免离线时 google-analytics-loading 延迟加载事件监听器

标签 javascript html google-analytics

我有一个可以在线和离线使用的应用程序。我已将 GA 包含在正文中并启用异步。我还有处理与 window 上的 load 事件监听器关联的 DOM 的核心函数。当系统未连接时,ga.js 文件需要花费大量时间来尝试加载。这可以防止触发 load 事件。那么我该如何避免这种情况呢?我可以使用 DOMContentLoaded 但这是一样的,因为 js 文件包含在 DOM 内容中。

最佳答案

尝试一下。

  1. 我们允许 ga 正常加载。
  2. 我们将 ga dom 元素的引用存储在全局变量 (gaClone) 中。
  3. 我们设置了 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>
    

关于javascript - 如何避免离线时 google-analytics-loading 延迟加载事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245066/

相关文章:

javascript - 如何在 Angular 中获取结构指令的 ElementRef

javascript - jQuery cloneTo 而不是 appendTo?

ios - 在 iOS 上将 Google Analytics 与 Swift 结合使用

sql - BigQuery GA 多个值

web - Google Analytics - 在单个 HTTP 请求中跟踪多个事件

javascript - 如何从另一个类型为 ="module"的 javascript 文件调用函数

javascript - Firefox event.clientX 无法运行

javascript - Css 滚动捕捉错误 iOS 10

html - 在 URL 中使用 `%3F`

html - 将 SVG 置于网格单元的中心