如何在 Next.js 应用程序中使用 mailerlite 弹出窗口

Posted

技术标签:

【中文标题】如何在 Next.js 应用程序中使用 mailerlite 弹出窗口【英文标题】:How to use mailerlite popups in a Next.js application 【发布时间】:2021-06-22 15:27:05 【问题描述】:

我正在为客户的 next.js 项目集成一个 mailerlite 弹出窗口,我很难将 javascript sn-ps 转换为使弹出窗口正常运行所需的 jsx。在第一次加载时它似乎工作得很好,但在重新加载时我收到以下错误。

window is not defined

我在处理DOM操作时遇到过这个问题,但是在这种情况下,从sn-p中的代码来看,我需要window对象。

在您网站的每个页面的结束标记之前安装以下 Javascript 的 sn-p。您只需添加此 sn-p 一次,即使您打算拥有几个不同的网络表单。 em>

<!-- MailerLite Universal -->
<script>
(function(m,a,i,l,e,r) m['MailerLiteObject']=e;function f()
var c= a:arguments,q:[];var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);
f.q=f.q||[];m[e]=m[e]||f.bind(f.q);m[e].q=m[e].q||f.q;r=a.createElement(i);
var _=a.getElementsByTagName(i)[0];r.async=1;r.src=l+'?v'+(~~(new Date().getTime()/1000000));
_.parentNode.insertBefore(r,_);)(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');

var ml_account = ml('accounts', '912433', 'd5p1f7l9g0', 'load');
</script>
<!-- End MailerLite Universal -->

我已将此代码放在我的布局包装器中。如前所述,它在首次加载时运行良好,但一旦用户导航到新页面,就会出现上述错误。

PS我发现了一个关于这个主题的老问题here,但它很老,与我的情况不太相关。我需要弄清楚如何将上面的 sn-p 转换为 nextjs。任何帮助都将不胜感激。

【问题讨论】:

【参考方案1】:

这种方法将 MailerLite 通用标签视为自己的 &lt;script&gt; 托管在您网站的域中。

    添加 NextJS custom document。 在./public 中创建一个包含MailerLite 通用标签代码的JavaScript 文件。我把我的放在./public/scripts/ml.js。 在您的自定义_document.js 文件中添加一个&lt;script&gt; 标记加载#2:
import Document,  html, Head, Main, NextScript  from 'next/document'

class MyDocument extends Document 
  static async getInitialProps(ctx) 
    const initialProps = await Document.getInitialProps(ctx)
    return  ...initialProps 
  

  render() 
    return (
      <Html>
        <Head>
          <script async src="/scripts/ml.js"></script>
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    )
  


export default MyDocument

从那里一切都按预期工作! (警告:我只使用嵌入式表单)。

【讨论】:

以上是关于如何在 Next.js 应用程序中使用 mailerlite 弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 Node.js 服务器的情况下部署 Next.js 应用程序?

如何在带有 TypeScript 的 next.config.js 中使用 i18n 和 next/image?

如何在 Next.js/React 中使用带有 @prismicio/client 库的时间线参考

如何在 Next JS 中使用链接测试路由?

如何使用 next.js 获取客户端 cookie?

如何使用 Next.js 仅将一些页面包装在 Context Provider 中?