import '../styles/globals.css'
import '../styles/typo.css'
import 'highlight.js/styles/tomorrow-night-eighties.css';
import ProgressBar from "@badrap/bar-of-progress";
import Router from "next/router";
import Head from "next/head";
const getAnalyticsTag = () => {
return {
__html: `
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?4dac1dac82xxxxx547b3c16ab87";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();`,
}
}
const progress = new ProgressBar({
size: 2,
color: "#42b983",
className: "bar-of-progress",
delay: 100,
});
Router.events.on("routeChangeStart", progress.start);
Router.events.on("routeChangeComplete", progress.finish);
Router.events.on("routeChangeError", progress.finish);
function MyApp({ Component, pageProps }) {
return (
<>
<Head>
<script dangerouslySetInnerHTML={getAnalyticsTag()}/>
)
}
Router.events.on('routeChangeComplete', (url) => {
try{
window._hmt.push(['_trackPageview', url]);
}catch (e){}
})
export default MyApp
因为Next.js路由采用的是前端路由,所以整个应用出来第一次是服务端渲染出来的,后面的都是在客户端渲染的,本质上还是一个单页面应用,而百度统计代码并没有很好的适配单页面应用,所以我们需要自己处理这部分逻辑。使用
routeChangeComplete
这个事件,会在路由切换完成后触发