在Gatsby站点中添加Drift聊天服务代码的位置咨询
在Gatsby博客中添加Drift聊天服务的解决方案
我来帮你搞定这个问题!针对你用的gatsby-starter-blog项目(默认没有直接暴露<head>标签),有几种简单可靠的方式来添加Drift的聊天代码,下面给你详细拆解:
方法一:用Gatsby SSR API注入(推荐,无需修改模板)
Gatsby提供了SSR(服务端渲染)API来帮我们往页面的<head>或<body>注入内容,这是最标准的做法:
- 在项目根目录创建一个
gatsby-ssr.js文件(如果还没有的话) - 把下面的代码粘贴进去,替换掉你的Drift App ID(就是代码里的
XYZXYZXYZXYZ):
exports.onRenderBody = ({ setHeadComponents }) => { setHeadComponents([ <script dangerouslySetInnerHTML={{ __html: ` "use strict"; !function() { var t = window.driftt = window.drift = window.driftt || []; if (!t.init) { if (t.invoked) return void (window.console && console.error && console.error("Drift snippet included twice.")); t.invoked = !0, t.methods = [ "identify", "config", "track", "reset", "debug", "show", "ping", "page", "hide", "off", "on" ], t.factory = function(e) { return function() { var n = Array.prototype.slice.call(arguments); return n.unshift(e), t.push(n), t; }; }, t.methods.forEach(function(e) { t[e] = t.factory(e); }), t.load = function(t) { var e = 3e5, n = Math.ceil(new Date() / e) * e, o = document.createElement("script"); o.type = "text/javascript", o.async = !0, o.crossorigin = "anonymous", o.src = "https://js.driftt.com/include/" + n + "/" + t + ".js"; var i = document.getElementsByTagName("script")[0]; i.parentNode.insertBefore(o, i); }; } }(); drift.SNIPPET_VERSION = '0.3.1'; drift.load('XYZXYZXYZXYZ'); `, }} />, ]); };
保存后重启开发服务器,Drift聊天框就会出现在你的网站上了。这个方法的好处是完全遵循Gatsby的最佳实践,不用碰任何模板文件。
方法二:使用官方Gatsby Drift插件(更简洁)
如果你不想自己写代码,用现成的插件会更省心:
- 先安装插件:
npm install gatsby-plugin-drift # 或者用yarn yarn add gatsby-plugin-drift
- 打开
gatsby-config.js,在plugins数组里添加插件配置:
module.exports = { plugins: [ // 其他已有的插件... { resolve: `gatsby-plugin-drift`, options: { appId: `XYZXYZXYZXYZ`, // 替换成你的Drift App ID enableDuringDevelop: false, // 可选:开发环境要不要启用,默认是false(避免开发时被打扰) }, }, ], };
配置好后重启服务,插件会自动帮你把Drift代码注入到<head>里,非常方便。
方法三:自定义html.js模板(不推荐,除非特殊需求)
如果你的项目需要完全自定义HTML结构,可以从Gatsby的缓存目录复制出html.js模板来修改:
- 从项目根目录的
.cache/default-html.js文件,复制一份到src/html.js - 打开
src/html.js,找到<head>标签,把Drift的代码直接粘贴进去:
<head> <!-- 保留原有的head内容,比如meta标签、样式链接等 --> <!-- Start of Async Drift Code --> <script> "use strict"; !function() { var t = window.driftt = window.drift = window.driftt || []; if (!t.init) { if (t.invoked) return void (window.console && console.error && console.error("Drift snippet included twice.")); t.invoked = !0, t.methods = [ "identify", "config", "track", "reset", "debug", "show", "ping", "page", "hide", "off", "on" ], t.factory = function(e) { return function() { var n = Array.prototype.slice.call(arguments); return n.unshift(e), t.push(n), t; }; }, t.methods.forEach(function(e) { t[e] = t.factory(e); }), t.load = function(t) { var e = 3e5, n = Math.ceil(new Date() / e) * e, o = document.createElement("script"); o.type = "text/javascript", o.async = !0, o.crossorigin = "anonymous", o.src = "https://js.driftt.com/include/" + n + "/" + t + ".js"; var i = document.getElementsByTagName("script")[0]; i.parentNode.insertBefore(o, i); }; } }(); drift.SNIPPET_VERSION = '0.3.1'; drift.load('XYZXYZXYZXYZ'); </script> <!-- End of Async Drift Code --> </head>
不过这个方法需要自己维护模板,Gatsby版本更新时可能需要同步修改模板内容,所以除非你有特殊的自定义需求,不然还是优先用前两种方法。
内容的提问来源于stack exchange,提问作者James Brightman
相关产品推荐
相关产品推荐

