【问题标题】:Inserting a Custom Script in React Helmet/ Gatsby在 React Helmet/ Gatsby 中插入自定义脚本
【发布时间】:2020-09-17 13:20:31
【问题描述】:

我有这个来自第三方的自定义脚本,我试图将其嵌入到 React Helmet 中

通常脚本仅作为 src url 给出。如果我得到下面的代码,使用 React Helmet 嵌入脚本的最佳做法是什么

    <script>
document.getElementsByTagName('head')[0].appendChild(function(s){
    var d=document,m2g=d.createElement('script'),l=function(){Mobi2Go.load(s.container,s.ready);},jq=window.jQuery&&+window.jQuery.fn.jquery.replace(/^(\d+).*$/,'$1')===1&&+window.jQuery.fn.jquery.replace(/^\d+\.(\d+).*$/,'$1')>=7,qs=window.location.search.substring(1),re='=(.*?)(?:;|$)',c=d.cookie.match('MOBI2GO_SESSIONID'+re),w=window.innerWidth;
    m2g.src='https://www.mobi2go.com/store/embed/1990-v8oL.js?'+qs+(jq?'&no_jquery':'')+(c?'&s='+c[1]:'')+'&device_width='+w;
    if(m2g.onload!==undefined)m2g.onload=l;else m2g.onreadystatechange=function(){if(m2g.readyState!=='loaded'&&m2g.readyState!=='complete')return;m2g.onreadystatechange=null;l();}
    window.Mobi2Go_est = +(new Date);
    return m2g;
}({
    container: 'Mobi2Go-Storefront', // Replace with ID  of the element to inject UI into
    ready: function() {} // Callback to fire when app is ready
}));
</script>

如果我将所有这些都包含在 React Helmet 中,显然会出现错误 不确定使其发挥作用的最佳做法是什么。

我也试过把它放在 gatsby 的 html.js 文件中

 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>
      <script
        dangerouslySetInnerHTML={{
          __html: `
          document.getElementsByTagName('head')[0].appendChild(function(s){
            var d=document,m2g=d.createElement('script'),l=function(){Mobi2Go.load(s.container,s.ready);},jq=window.jQuery&&+window.jQuery.fn.jquery.replace(/^(\d+).*$/,'$1')===1&&+window.jQuery.fn.jquery.replace(/^\d+\.(\d+).*$/,'$1')>=7,qs=window.location.search.substring(1),re='=(.*?)(?:;|$)',c=d.cookie.match('MOBI2GO_SESSIONID'+re),w=window.innerWidth;
            m2g.src='https://www.mobi2go.com/store/embed/1990-v8oL.js?'+qs+(jq?'&no_jquery':'')+(c?'&s='+c[1]:'')+'&device_width='+w;
            if(m2g.onload!==undefined)m2g.onload=l;else m2g.onreadystatechange=function(){if(m2g.readyState!=='loaded'&&m2g.readyState!=='complete')return;m2g.onreadystatechange=null;l();}
            window.Mobi2Go_est = +(new Date);
            return m2g;
        }({
            container: 'Mobi2Go-Storefront', // Replace with ID  of the element to inject UI into
            ready: function() {} // Callback to fire when app is ready
        })););
        `,
        }}
      />
    </html>
  );
}

HTML.propTypes = {
  htmlAttributes: PropTypes.object,
  headComponents: PropTypes.array,
  bodyAttributes: PropTypes.object,
  preBodyComponents: PropTypes.array,
  body: PropTypes.string,
  postBodyComponents: PropTypes.array,
};

【问题讨论】:

  • 请将您提到的错误信息添加到您的问题中

标签: javascript reactjs embed gatsby react-helmet


【解决方案1】:

它应该使用react-helmet 工作,the README 中有它的示例。

您的script 标签中可能缺少type="text/javascript"

<script type="text/javascript">
  // your script goes here
</script>

如果这对您不起作用,另一种选择是customize Gatsby's html.js

【讨论】:

  • 这些解决方案都不适合我,问题是有很多我不理解的自定义代码,并且放置它反应头盔或 htm.js 对我不起作用。你有例子吗?
  • 如果这不起作用,我需要调试信息来进一步帮助您(错误消息等)。您的脚本可能存在问题,而不是 React Helmet 或 Gatsby。
  • 脚本就是上面那个。那是来自第三方。您是否能够使用 React Helmet 最终实现它?
【解决方案2】:

在头盔标签内使用脚本标签。最重要的是你的脚本应该放在花括号里

<Helmet>
  <script>
    {`alert( 'Hello, world!' );`}
  </script>
 </Helmet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2021-07-25
    相关资源
    最近更新 更多