GA作为RequireJS依赖与AdBlock EasyPrivacy列表

时间:2014-09-21 04:15:39

标签: javascript google-analytics requirejs adblock

我有一个app(angular,d3等),我正在加载require.js。 Google Analytics和AdBlock的EasyPrivacy列表阻止的其他一些脚本位于依赖关系链中,这意味着如果用户启用了该应用,该应用将无法加载。

我知道如果我没有在我的脚本上运行优化器来包装它们,那么会有回退路径,但如果它们被阻止,或者嗅探广告拦截器并有条件地加载,是否有任何方法可以回退一个单独的配置,同时仍然能够优化和包装我的脚本?

可能是这样的:

define(function () {
  try {
    var something = require('//path/to/ga');
  } catch (e) {
    return require('fallback');
  }
  return something;
});

使用它作为加载GA的依赖关系?

这样的事情会起作用吗?有什么我想念的,还是更好的方式?我是否可以嗅探AdBlock,但只有在阻止分析时,才会相应加载?

2 个答案:

答案 0 :(得分:2)

经过太长时间,我发现在r.js配置中使用:empty,例如。

paths: {
    googleAnalytics: ":empty",
    ...
}

加载main.js中要求回调的原始文件,所以我可以在那里添加回退:

paths: {
   googleAnalytics: ['//www.google-analytics.com/analytics', 'ga-fb'],
   ...
}

其中ga-fb.js只加载一个脚本,该脚本在window.ga添加一个noop函数,以防止在调用时抛出错误。 ga-fb.js无法折叠到优化文件中,如果需要,将单独加载。

可能是一个初学者级别的问题,但我希望这可以节省一些问题。这是我的第一个使用require.js的项目,所以我一定会遇到初级问题。

答案 1 :(得分:0)

您可以在require.js配置中列出paths中的google analytics.js网址:

require.config({
  paths: {
    ga: '//www.google-analytics.com/analytics'
  }
});

然后在您需要访问谷歌分析的分析功能内部直接调用它,并有一个错误函数,将window.ga分配给一个始终返回undefined的函数:

require(['ga'], function(data) {
  window.ga('create', 'UA-XXXXXXXX-X');
  window.ga('send', 'pageview');
}, function() {
  window.ga = function(){};
});