检查是否已加载analytics.js

我必须使用我在服务器上提供的本地analytics.js。 我只是想在必要时使用本地版本 – 那么是否有解决方案来检查对analytics.js的调用是否失败?

我想用全局window.onerror检查它,但我不认为对外部文件的失败调用会导致错误。 我已经尝试检查ga()是否可用,但即使没有加载analytics.js也是如此。

有任何想法吗? 如果您想知道,并非本网站的所有用户都可以访问互联网,那就是我提供本地版本的原因。 在这种情况下会发生更多事情,例如添加sendHitTask以将analytics.js的答案重定向到本地服务器。

编辑用于检查用户是否可以访问Internet的解决方案也可以。 但我没有找到任何适用于所有现代浏览器的解决方案。

有一个函数可以跟踪库是否已加载。 来自文档https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference#ready-callback :

ga(function(tracker) { var defaultPage = tracker.get('page'); }); 

传入函数在加载库时执行,因此您可以设置一个变量来跟踪它是否已加载。 您必须将它放在某种计时器上,以决定何时考虑它失败:

 var loaded = false; ga(function() { loaded = true; }); // after one second do something if the library hasn't loaded setTimeout(function(){ if (!loaded){ //do something } },1000); 

一个特别优雅的解决方案是使用RequireJS并利用其对回退路径的支持。 我在我的网站上执行此操作以加载存储版本的analytics.js如果加载GA失败,因为访问者使用隐私工具阻止请求:

http://veithen.github.io/2015/02/14/requirejs-google-analytics.html

您的用例类似,但您希望回退到完整的本地副本。 您也可能不希望更改所有对GA的调用,如该文章中所述。 如果是这种情况,那么您可以使用混合方法,只需使用RequireJS加载analytics.js (Google的版本或本地副本),而无需更改任何其他代码。

设置此项将涉及以下步骤:

  • 将RequireJS添加到您的站点并按如下方式进行配置:

     require.config({ paths: { "ga": [ "//www.google-analytics.com/analytics", "local-copy-of-analytics" ] } }); 
  • 使用替代版本的跟踪代码 ,但使用以下JavaScript代码替换

     require(["ga"]);