Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在扩展开始时互联网不可用时,在chrome扩展中启用分析_Javascript_Google Chrome_Google Chrome Extension_Google Analytics_Universal Analytics - Fatal编程技术网

Javascript 在扩展开始时互联网不可用时,在chrome扩展中启用分析

Javascript 在扩展开始时互联网不可用时,在chrome扩展中启用分析,javascript,google-chrome,google-chrome-extension,google-analytics,universal-analytics,Javascript,Google Chrome,Google Chrome Extension,Google Analytics,Universal Analytics,我在我的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

我在我的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
是可访问的。如果不是,则使用(最好)或
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

谢谢你的回答。还找到了另一个方法来检查analytics.js是否在@mallik1055加载,另一个方法值得作为答案出现在这里,并带有到源文章的链接。您是否愿意添加它,甚至选择它作为解决方案?请注意使用20秒的设置间隔,如果您使用事件页(
“persistent”:false
),它将失败