2014-09-21 42 views
1

我有一個應用程序(角,D3等),我加載了require.js。 Google Analytics和其他被AdBlock的EasyPrivacy列表阻止的腳本位於依賴鏈中,這意味着如果用戶啓用了應用程序,則不會加載該應用程序。GA作爲RequireJS依賴與AdBlock Easy隱私列表

我知道如果我沒有在腳本上運行優化程序來包裝它們,但是有什麼方法可以在它們被阻止時回退,或者有條件地嗅探廣告攔截器加載一個單獨的配置,同時仍然能夠優化和包裝我的腳本?

也許是這樣的:

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

使用作爲依賴加載GA?

會這樣的工作?有什麼我想念的,或者更好的方法?我是否可以嗅探AdBlock,但僅限於阻止分析,並相應加載?

+0

您可以檢查屬於GA對象的存在,「GoogleAnalyticsObject」我猜。或者檢查「analytics.js」文件是否已加載。 – Chaoley 2014-09-22 04:57:14

回答

1

經過太久,我發現在r.js配置中使用:empty,例如,

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

加載名爲原始文件(S)在main.js包括回調,所以我可以添加有回退:

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

其中ga-fb.js只是加載一個腳本,在window.ga增加了一個空操作功能在被調用時不要拋出錯誤。 ga-fb.js不能摺疊到優化的文件中,如果需要,將單獨加載。

可能是一個初學者級的問題,但我希望這可以節省一些人的問題。這是我第一個使用require.js的項目,所以我一定會遇到初學者的問題。

0

可以列出谷歌的analytics.js URL在paths在require.js配置:

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(){}; 
});