转义分析代码dangerouslySetInnerHTML
首先,您当然必须将标头代码共享给所有页面,例如:React js do common header
然后,这个 Next.js 答案https://stackoverflow.com/a/24588369/895245提供了一个很好的工作代码,它也应该在 Next.js 之外工作。它通过以下方式转义分析代码dangerouslySetInnerHTML
:
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-47867706-3"></script>
<script
dangerouslySetInnerHTML={{
__html: `window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-47867706-3', { page_path: window.location.pathname });
`,
}}
/>
您应该UA-47867706-3
用自己的代码替换的地方。
此代码正是 Google 提供的代码,但进行了以下修改:我们添加了:
{ page_path: window.location.pathname }
使其gtag('config'
能够获得访问的路径,因为这是一个 JavaScript SPA。
这会在浏览器上生成所需的输出:
<script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-47867706-3"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-47867706-3', { page_path: window.location.pathname });
</script>
与 Google 给出的确切代码的唯一不同之处是async=""
vs async
,但这两者在 HTML 中是等价的,因为它是一个布尔属性,另请参阅:HTML 复选框的选中属性的正确值是什么?
转义dangerouslySetInnerHTML
是必要的,因为否则 React 会解释script
JSX 中的代码,并且会失败:
Syntax error: Unexpected token, expected "}"
21 | <script>
22 | window.dataLayer = window.dataLayer || [];
> 23 | function gtag(){dataLayer.push(arguments);}
| ^
24 | gtag('js', new Date());
25 |
26 | gtag('config', 'UA-47867706-3');
我希望他们会自动script
为我们逃离里面的东西。
最后要获得页面切换,您还必须使用更多代码来跟踪它,请参阅上面提到的 Next.js 答案以获取示例。
相关:将脚本标签添加到 React/JSX
在 react 17.0.2、next.js 10.2.2 上测试。