启用分析在chrome扩展时,互联网是不可用的扩展开始
Enable analytics in chrome extension when internet is not available at start of extension
我使用分析在我的chrome扩展像这样
background.js
// Standard Google Universal Analytics code
(function(i,s,o,g,r,a,m)
{i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new
Date();a=s.createElement(o),
m=s.getElementsByTagName(o)
[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-
analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-YY', 'auto');
ga('set', 'checkProtocolTask', function(){}); // Removes failing protocol
ga('require', 'displayfeatures');
在manifest.json
中拥有所有必要的权限一切按预期工作,除了在扩展开始时没有互联网的情况。在这种情况下,事件不会发送到服务器,因为没有加载analytics.js。这将导致事件丢失,直到下次chrome重启并成功连接互联网。
使用XMLHttpRequest
测试https://www.google-analytics.com/analytics.js
是否可达。如果不是,使用chrome创建一个计时器。警报API(最好)或setInterval
将重复此测试。一旦站点可访问,初始化GA。
我找到了一种优雅的方法
function loadAnalyticsScript() {
// The standard Google Universal Analytics code
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); // Note: https protocol here
}
var analyticsLoaded = false; // initialise
loadAnalyticsScript();
/************Detect if analytics script has loaded **********/
// Method 1 src:https://davidsimpson.me/2014/05/27/add-googles-universal-analytics-tracking-chrome-extension/#comment-190946
ga(function(){
// This function will be triggered when GA is successfully loaded for the first time.
console.log(' +++ Google Analytics has loaded');
analyticsLoaded = true;
});
// Alternative Method 2 src:https://www.domsammut.com/code/workaround-for-when-the-hitcallback-function-does-not-receive-a-response-analytics-js
if (ga.hasOwnProperty('loaded') && ga.loaded === true) {
console.log(' +++ Google Analytics has loaded');
analyticsLoaded = true;
}
/*************************************************/
// All the events tracking goes here
ga('create', 'UA-XXXXX-YY', 'auto');
ga('set', 'checkProtocolTask', function(){}); // Removes failing protocol check. @see: http://stackoverflow.com/a/22152353/1958200
ga('require', 'displayfeatures');
ga('send', 'pageview', '/options.html');
// Test to see if it's loaded yet.
var gaLoadTimer = setInterval(function(){
if (analyticsLoaded === false) {
console.log("Retrying for GA script");
loadAnalyticsScript(); //try again
}
else{
clearInterval(gaLoadTimer);
}
}, 20000); // every 20s
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 扩展移相器按钮类不工作
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- TableExport jquery插件:文件名和扩展名问题
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 扩展SVGTextElement时出现Typescript Uncaught TypeError
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- Javascript”;类“;带有参数的扩展
- Jquery FullCalendar扩展开始日期或结束日期
- 开始使用Chrome扩展程序和JQuery
- 启用分析在chrome扩展时,互联网是不可用的扩展开始
- 编码JS下划线_.从零开始扩展
- 如何开始编写Gnome Shell扩展
- 从chrome 54开始,如何从扩展调度可信的textInput事件
- Chrome扩展隐身模式:检查是否激活或开始与一个按钮
- Chrome扩展:我怎么能强迫一个脚本开始后,只有前一个的终端
- Ajax日历扩展程序的开始日期和结束日期相差60天