GA作为RequireJS依赖与AdBlock EasyPrivacy列表

GA as RequireJS dependency vs. AdBlock EasyPrivacy list

本文关键字:AdBlock EasyPrivacy 列表 依赖 作为 RequireJS GA      更新时间:2023-09-26

我有一个应用程序(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吗?但前提是它正在阻止分析,并相应地加载?

太久之后,我发现在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的项目,所以我肯定会遇到初学者级别的问题。

您可以在require.js-config:中列出paths中的google analytics.js URL

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

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

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