我有一个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,但只有在阻止分析时,才会相应加载?
答案 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(){};
});