facebook - 脚本标签在通用 react 应用程序(FB插件)中运行两次

标签 facebook reactjs

我正在尝试将我的 Facebook 页面插件包含在我的 React 应用程序中。我正在尝试使用 react-helmet 来实现这一点但我遇到了一个问题。如果我按照文档的建议将其作为脚本标签放入,则脚本将运行两次但仅添加到 <head>部分一次...我正在使用 starter kit .

这是我得到的

Html.jsx(负责渲染整个 html 页面,link to file):

render() {
const {assets, component, store} = this.props
const content = component ? ReactDOM.renderToString(component) : ''
const head = Helmet.rewind()

return (
  <html lang="en-us">
    <head>
      ...
      {head.script.toComponent()}
      ...
)

在我的 App.jsx 中:

<Helmet
      script={[
        // {"type": 'text/javascript', "innerHTML": `{!function(f,b,e,v,n,t,s){}...cut down for brevity;console.log('I was fired');}`}
      ]}
      {...config.app.head}/>

由于某种原因,上述日志语句触发两次,导致 Facebook Pixel Error: Duplicate Pixel ID: XYZ

如果需要更多信息,请告诉我

最佳答案

请注意,根据 source , react-helmet 吹掉它渲染的所有服务器头标签,然后重新创建它们。我不完全理解他们为什么这样做(也许他们只能替换已更改的标签?也许枚举已更改的属性有点困难?)但这就是导致您的问题的原因。

我知道,因为我也有同样的问题;)

至于解决方案,以下是一些可能性:

  • 停止使用react-helmet来管理跟踪像素/脚本/片段 - 而只需将它们粘贴到相当于renderPage()和/或index.html<
  • 为react-helmet创建一个拉取请求,停止执行此操作(或者直接询问他们,这可能会更快!)
  • 将所述代码包装在某种防护中(在 window 对象上放置一个属性,然后仅在未找到该属性时运行任何该内容)
  • 为react-helmet创建一个拉取请求,允许您对某个元素或类似的内容说“不重新渲染”

我还没有找到我真正喜欢的解决方案,但其中任何一个都应该有效,祝你好运:)

请注意,我创建了一个 issue here

关于facebook - 脚本标签在通用 react 应用程序(FB插件)中运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355346/

相关文章:

facebook-graph-api - Facebook 和 Twitter API 出了什么问题?

javascript - 我如何在 Next.js 中删除 ID 为 ="__next"的 div

javascript - Uncaught TypeError : this. state.pokemon.filter 不是函数?

javascript - 如何从 Nodejs 后端的 JSON 填充 React 数组

facebook - 从 .htaccess 重定向中免除 Facebook 爬虫

android - Branch.io 延迟深度链接在 Facebook 广告中不起作用

reactjs - 在 react redux saga 中处理同步

reactjs - 执行 POST - 在 JSON 服务器中使用自定义 id

iphone - iOS Facebook SDK-检索 friend 个人资料图片

java - 如何获取 Facebook 个人资料图片 URL