JavaScript window.onload和jQuery的$(document).ready()方法有什么区别?
我Pageview在Google跟踪代码管理器中有跟踪SPA网页浏览量的标记,与本指南中描述的相同.基本上,它是具有链接的Google Analytics ID的通用分析,它是在历史记录更改时All Pages触发的(在某些时候,触发器也被添加但没有成功).
在我当前的应用程序中,GTM会Pageview在没有异步解析器的所有路由上的初始页面浏览量上跳过标记.通常路由有时会触发标记(5次中的1次),这可能会有所不同,具体取决于条件(缓存与未缓存,本地主机与生产).
在具有长持续时间(> 1s)的解析程序的路径上,Pageview始终在初始网页浏览中触发标记(5次中的5次).
Pageview应用初始化(pushState)后,在所有路由上正常触发标记.
GTM调试控制台和GA实时监控确认了此行为.
设置似乎是推荐的,GTM代码段被加载<head>,Angular 2应用程序在末尾加载<body>.
<html>
<head>
<script>/* Google Tag Manager snippet */</script>
...
</head>
<body my-app>
...
<script src="my-app-bundle.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Angular 2像往常一样被引导:
platformBrowserDynamic().bootstrapModule(MyAppModule);
Run Code Online (Sandbox Code Playgroud)
我试图在前后移动GTM代码段my-app-bundle.js,甚至用同步代替它:
<script>
window.dataLayer = ...
</script>
<script src="https://www.googletagmanager.com/gtm.js?id=..."></script>
Run Code Online (Sandbox Code Playgroud)
默认代码段没有区别.
我通过反复试验发现,Pageviews如果应用程序以相当大的延迟,200-1000毫秒进行自举,则开始在初始页面浏览量上正常工作(起初DOMContentLoaded似乎有诀窍,但延迟还不够):
setTimeout(() => {
platformBrowserDynamic().bootstrapModule(MyAppModule);
}, 1000);
Run Code Online (Sandbox Code Playgroud)
我希望这个问题对于使用SPA/Angular 2应用程序完成GTM的专家来说很熟悉. …
google-analytics single-page-application google-tag-manager angular2-routing angular