【发布时间】:2020-05-27 03:44:18
【问题描述】:
我正在为我的网站和 react-cookie-consent 库使用 React/Nextjs。它会创建一个弹出窗口,用户可以在其中同意 cookie 策略。如果同意,则设置一个 cookie:CookieConsent,值为“true”。
此外,如果用户同意,我想使用 Google Analytics 跟踪用户(点击弹出窗口上的接受)。
但它不起作用:Google Analytic cookies _ga 和 G_ENABLED_IDPS 是在用户点击弹出窗口之前设置的。
有趣的是,我只是在 Microsoft Edge 浏览器上才意识到这一点。在 Chrome 中,在用户同意之前不会设置这些 cookie。
这是我当前在 _document.js 中的代码:
<Head>
{/* Global Site Tag (gtag.js) - Google Analytics */}
<script
async
src={`https://www.googletagmanager.com/gtag/js?id=${GA_TRACKING_ID}`}
/>
<script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
`}}
/>
<script type="text/javascript" src="/static/blockReactDevTools.js" />
<link href="https://fonts.googleapis.com/css?family=Cabin&display=swap" rel="stylesheet" />
</Head>
我使用了一些来自互联网的提示,并想出了这个版本,它也不起作用:
<Head>
{/* Global Site Tag (gtag.js) - Google Analytics */}
<script
async
src={`https://www.googletagmanager.com/gtag/js?id=${GA_TRACKING_ID}`}
/>
<script
dangerouslySetInnerHTML={{
__html: `
var gtagId = '${GA_TRACKING_ID}';
window['ga-disable-' + gtagId] = true;
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
window.addEventListener("load", function() {
var isCookieConsentTrue = getCookie("CookieConsent") == 'true';
if(isCookieConsentTrue){
window['ga-disable-' + gtagId] = false;
alert("Cookie Consent given!");
} else {
alert("Cookie Consent NOT given!");
window['ga-disable-' + gtagId] = true;
}
});
`}}
/>
<script type="text/javascript" src="/static/blockReactDevTools.js" />
<link href="https://fonts.googleapis.com/css?family=Cabin&display=swap" rel="stylesheet" />
</Head>
我不知道这是 nextjs 特有的问题,还是普通的愚蠢问题。
谁能指导我找到可行的解决方案?
编辑:我尝试了建议的“通用分析”方法。建议的解决方案使我的辅助函数记录事件和浏览量失败(见下文)。我还需要 gtag 管理器吗?
【问题讨论】:
标签: javascript reactjs cookies google-analytics next.js