来自file:// url的Google Analytics

Ale*_*yne 15 javascript google-analytics cross-domain

我们有一个基于html的基于HTML的应用程序框架的东西,并希望谷歌分析与它一起工作.我相信我们已经正确设置,以便_trackPageview在需要的地方手动调用.

但事情似乎没有得到报道.现在要么我没有正常工作,要么使用file://URL上的协议从javascript跟踪GA 默认违反了一些我不知道的跨域策略.

GA也可以通过本地html工作file://吗?或者我的GA使用有问题吗?

请注意,我们使用的域实际上并不存在.我们希望使用类似移动应用程序跟踪的功能,但需要使用JavaScript而不是本机库.为了做到这一点,它看起来你设置了一个假域,并告诉跟踪器应该报告哪个域.


在我的结尾<head>:

<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXACCOUNTID-XX']);
  _gaq.push(['_setDomainName', 'myfake.domain.com']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = 'http://www.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>
Run Code Online (Sandbox Code Playgroud)

在我们的JS框架中,我们称之为:

_gaq.push(['_trackPageview', '/some/path/here']);
Run Code Online (Sandbox Code Playgroud)

Jim*_*rts 21

Google现在支持通过将协议检查任务设置为null来禁用协议检查任务,从而允许您从file://网址跟踪分析:

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'checkProtocolTask', null); // Disable file protocol checking.
ga('set', 'checkStorageTask', null); // Disable cookie storage checking.
ga('set', 'historyImportTask', null); // Disable history checking (requires reading from cookies).
ga('send', 'pageview');
Run Code Online (Sandbox Code Playgroud)

  • 今天用gtag进行处理的方式是什么? (2认同)

Ced*_*ach 9

需要进行一些调整:

禁用 cookie 存储

由于没有域在起作用,因此无法使用 Cookie,因此我们需要防止 GA 尝试使用它们。这是通过'storage': 'none'在创建配置(文档)中设置来完成的。

禁用文件协议检查

默认情况下,如果协议(在我们的例子中file)不是http或,GA 会中止https。使用相应的任务禁用此检查:ga('set', 'checkProtocolTask', null)

手动设置活动页面

由于没有域,GA 无法导出表示活动页面的路径。可以使用页面 URL 修改功能手动配置:ga('set', 'page', 'foobar')

随后ga('send', 'pageview')将在数据中显示为对 的访问/foobar

使用 localStorage 跟踪用户身份(可选)

禁用 cookie 后,不会跨页面加载跟踪用户,因此每次刷新都会触发对另一个唯一访问者的检测。但是,我们可以通过设置在创建时提供自定义客户端 ID'clientId': localStorage.getItem(someKey),它会查找以前存储的客户端 ID。

存储 ids 是由

ga(function(tracker) {
  localStorage.setItem(someKey, tracker.get('clientId'));
})
Run Code Online (Sandbox Code Playgroud)

一切结合

结合以上所有步骤,我们最终得到如下结果:

(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-XXXXXXXX-Y', {
    'storage': 'none',
    'clientId': localStorage.getItem('ga:clientId')
});
ga(function(tracker) {
    localStorage.setItem('ga:clientId', tracker.get('clientId'));
});
ga('set', 'checkProtocolTask', null);

ga('set', 'page', 'myPage');
ga('send', 'pageview');
Run Code Online (Sandbox Code Playgroud)