reactjs - 无法在 Gatsby 中注入第 3 方脚本
问题描述
Sovrn 展示广告的头部需要注入以下代码:
<script type="application/javascript">var googletag=googletag||{};googletag.cmd=googletag.cmd||[];googletag.cmd.push(function(){googletag.pubads().disableInitialLoad()});</script><script type="application/javascript" src="//ap.lijit.com/www/headerauction/headersuite.min.js?configId=XXXX"></script>
它会查找 ID="21728840" 的 div 以显示该 div 的广告。我正在使用 Netlify,因此将此脚本注入头部不是问题,但 Netlify 会执行此后期处理。因此,在脚本加载时,由于元素未定义,因此无法找到 ID,并返回 403 错误。我查看了很多建议,并尝试在广告这样的文件中使用 useEffect :
export const BlogIndexTemplate = ({ posts, title...
...
useEffect(() => {
var googletag = googletag || {}
googletag.cmd = googletag.cmd || []
googletag.cmd.push(function() {
googletag.pubads().disableInitialLoad()
})
const script = document.createElement('script')
script.async = true
script.src =
'//ap.lijit.com/www/headerauction/headersuite.min.js?configId=XXXX'
document.head.appendChild(script)
}, [])
...
{!!posts.length && (
<section className="section">
<div className="container">
<PostSection posts={filteredPosts} />
</div>
</section>
)}
广告容器位于 PostSection 中,如下所示:
class PostSection extends React.Component {
...
<div className="sidebar-sticky-container">
<div className="ad-skyscraper-container sticky-widget">
<div id="21728840"></div>
我不确定还有什么其他方法可以尝试注入脚本,并操纵 ID 为 21728840 的 div 来显示广告。
解决方案
经过大量研究,我发现使用 useEffect 和网上的大多数建议对于 Gatsby 来说是不必要的。要注入第 3 方脚本,需要在根目录中创建一个 gatsby-ssr.js 文件。在此文件中,应具有以下基本设置:
const React = require('react')
exports.onRenderBody = function({
setHeadComponents,
setPreBodyComponents
}) {
setHeadComponents([
<script
dangerouslySetInnerHTML={{whateveryouneedtoset}}>
])
setPreBodyComponents([
<script
dangerouslySetInnerHTML={{whateveryouneedtoset}}>
])
}
可以在此处找到使用 gatsby-ssr.js 文件的所有选项:Gatsby SSR
推荐阅读
- android - 如何清理僵尸进程
- python - 如何在 Python 中压缩文件夹?
- java - 如何仅使用文件名获取 Java File AbsolutePath()?
- swift - Swift:从 Firebase 检索数据并在表格视图中显示
- ios - 我想使用传感器跟踪设备跌落
- javascript - 当用户已在 TFS 仪表板中进行身份验证时如何避免 REST API 身份验证
- java - Spring Data JPA findById() 方法返回 null 而不是 Empty 可选
- flutter - 如何在方法中调用 ScopedModelDescendant?
- javascript - Save \n symbol in the string (JS)
- spring-boot - spring-boot 执行器端点值