将 clutch.co 小部件嵌入到 Gatsby.js 网站
Embedding clutch.co widget to Gatsby.js website
我正在尝试将 clucth.co 小部件添加到 Gatsby 站点,但它没有呈现。我已经尝试在 <script>
部分使用 React Helmet,但它仍然不起作用。
希望我在这里遗漏了一些简单的东西,但查看其他解决方案我找不到任何有效的方法。
供参考:https://clutch.co/content/add-review-widget-your-website
<script type="text/javascript" src="https://widget.clutch.co/static/js/widget.js"></script>
<div className="clutch-widget" data-url="https://widget.clutch.co" data-widget-type="7" data-height="65" data-clutchcompany-id="XXXXXXX"></div>
您可以通过多种方式在 Gatsby 中插入第三方脚本。你将面临的所有问题是你需要等待你的 div
:
<div className="clutch-widget" data-url="https://widget.clutch.co" data-widget-type="7" data-height="65" data-clutchcompany-id="XXXXXXX"></div>
需要渲染您的脚本将无法加载。
使用Helmet
:
你说你已经尝试过但它应该。您可能需要尝试添加 gatsby-plugin-react-helmet
的嵌入式支持。那么:
<Layout>
<SEO title="Live" />
<Helmet>
<script src="https://tlk.io/embed.js" type="text/javascript"/>
</Helmet>
</Layout>
检查 compatibility issues 与钩子一起使用时。
使用 onRenderBody
API 来自 gatsby-ssr.js
:
Gatsby 在 onRenderBody
API 中公开了一个 setHeadComponents
函数,您可以利用它:
import React from "react"
export const onRenderBody = ({ setHeadComponents }, pluginOptions) => {
setHeadComponents([
<script key="tracking"
src="https://widget.clutch.co/static/js/widget.js
type="text/javascript"
async
/>,
])
}
上面的代码片段会将 <script>
插入已编译 HTML 的 <head>
标记中。
这里有另一种使用 dangerouslySetInner 的方法HTML:
setHeadComponents([
<script dangerouslySetInnerHTML={{whateveryouneedtoset}}>
])
摘自Unable to Inject 3rd Party Scripts in Gatsby
直接修改html.js
:
您可以通过 modifying the html.js
自定义更多结果 HTML 的输出,这是使用 Gatsby 构建整个网站的样板文件。
运行:
cp .cache/default-html.js src/html.js
或者,将 default-html.js
从 .cache
文件夹复制到 /src
并将其重命名为 html.js
。编译时,如果 html.js
存在,Gatsby 将使用它来基于该骨架构建您的站点。
你会得到类似的东西:
import React from "react"
import PropTypes from "prop-types"
export default function HTML(props) {
return (
<html {...props.htmlAttributes}>
<head>
<meta charSet="utf-8" />
<meta httpEquiv="x-ua-compatible" content="ie=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
{props.headComponents}
</head>
<body {...props.bodyAttributes}>
{props.preBodyComponents}
<div
key={`body`}
id="___gatsby"
dangerouslySetInnerHTML={{ __html: props.body }}
/>
{props.postBodyComponents}
</body>
</html>
)
}
HTML.propTypes = {
htmlAttributes: PropTypes.object,
headComponents: PropTypes.array,
bodyAttributes: PropTypes.object,
preBodyComponents: PropTypes.array,
body: PropTypes.string,
postBodyComponents: PropTypes.array,
}
在那里你可以直接添加你的<script>
:
<head>
<meta charSet="utf-8" />
<meta httpEquiv="x-ua-compatible" content="ie=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<script type="text/javascript" src="https://widget.clutch.co/static/js/widget.js"></script>
{props.headComponents}
</head>
使用gatsby-plugin-load-script
:
只需安装并使用插件:
{
resolve: 'gatsby-plugin-load-script',
options: {
src: 'https://widget.clutch.co/static/js/widget.js',
},
},
破解 gatsby-browser.js
API:
如果上述 none 适合您,您仍然可以使用 gatsby-browser.js
API 之一 (onClientEntry
) 手动添加给定源的脚本 URL:
const addScript = url => {
const script = document.createElement("script")
script.src = url
script.async = true
document.body.appendChild(script)
}
export const onClientEntry = () => {
window.onload = () => {
addScript("https://widget.clutch.co/static/js/widget.js")
}
}
我正在尝试将 clucth.co 小部件添加到 Gatsby 站点,但它没有呈现。我已经尝试在 <script>
部分使用 React Helmet,但它仍然不起作用。
希望我在这里遗漏了一些简单的东西,但查看其他解决方案我找不到任何有效的方法。
供参考:https://clutch.co/content/add-review-widget-your-website
<script type="text/javascript" src="https://widget.clutch.co/static/js/widget.js"></script>
<div className="clutch-widget" data-url="https://widget.clutch.co" data-widget-type="7" data-height="65" data-clutchcompany-id="XXXXXXX"></div>
您可以通过多种方式在 Gatsby 中插入第三方脚本。你将面临的所有问题是你需要等待你的 div
:
<div className="clutch-widget" data-url="https://widget.clutch.co" data-widget-type="7" data-height="65" data-clutchcompany-id="XXXXXXX"></div>
需要渲染您的脚本将无法加载。
使用Helmet
:
你说你已经尝试过但它应该。您可能需要尝试添加 gatsby-plugin-react-helmet
的嵌入式支持。那么:
<Layout>
<SEO title="Live" />
<Helmet>
<script src="https://tlk.io/embed.js" type="text/javascript"/>
</Helmet>
</Layout>
检查 compatibility issues 与钩子一起使用时。
使用 onRenderBody
API 来自 gatsby-ssr.js
:
Gatsby 在 onRenderBody
API 中公开了一个 setHeadComponents
函数,您可以利用它:
import React from "react"
export const onRenderBody = ({ setHeadComponents }, pluginOptions) => {
setHeadComponents([
<script key="tracking"
src="https://widget.clutch.co/static/js/widget.js
type="text/javascript"
async
/>,
])
}
上面的代码片段会将 <script>
插入已编译 HTML 的 <head>
标记中。
这里有另一种使用 dangerouslySetInner 的方法HTML:
setHeadComponents([
<script dangerouslySetInnerHTML={{whateveryouneedtoset}}>
])
摘自Unable to Inject 3rd Party Scripts in Gatsby
直接修改html.js
:
您可以通过 modifying the html.js
自定义更多结果 HTML 的输出,这是使用 Gatsby 构建整个网站的样板文件。
运行:
cp .cache/default-html.js src/html.js
或者,将 default-html.js
从 .cache
文件夹复制到 /src
并将其重命名为 html.js
。编译时,如果 html.js
存在,Gatsby 将使用它来基于该骨架构建您的站点。
你会得到类似的东西:
import React from "react"
import PropTypes from "prop-types"
export default function HTML(props) {
return (
<html {...props.htmlAttributes}>
<head>
<meta charSet="utf-8" />
<meta httpEquiv="x-ua-compatible" content="ie=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
{props.headComponents}
</head>
<body {...props.bodyAttributes}>
{props.preBodyComponents}
<div
key={`body`}
id="___gatsby"
dangerouslySetInnerHTML={{ __html: props.body }}
/>
{props.postBodyComponents}
</body>
</html>
)
}
HTML.propTypes = {
htmlAttributes: PropTypes.object,
headComponents: PropTypes.array,
bodyAttributes: PropTypes.object,
preBodyComponents: PropTypes.array,
body: PropTypes.string,
postBodyComponents: PropTypes.array,
}
在那里你可以直接添加你的<script>
:
<head>
<meta charSet="utf-8" />
<meta httpEquiv="x-ua-compatible" content="ie=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<script type="text/javascript" src="https://widget.clutch.co/static/js/widget.js"></script>
{props.headComponents}
</head>
使用gatsby-plugin-load-script
:
只需安装并使用插件:
{
resolve: 'gatsby-plugin-load-script',
options: {
src: 'https://widget.clutch.co/static/js/widget.js',
},
},
破解 gatsby-browser.js
API:
如果上述 none 适合您,您仍然可以使用 gatsby-browser.js
API 之一 (onClientEntry
) 手动添加给定源的脚本 URL:
const addScript = url => {
const script = document.createElement("script")
script.src = url
script.async = true
document.body.appendChild(script)
}
export const onClientEntry = () => {
window.onload = () => {
addScript("https://widget.clutch.co/static/js/widget.js")
}
}