【问题标题】:Calendly widget doesn't work after page refresh when live实时页面刷新后日历小部件不起作用
【发布时间】:2021-05-24 22:37:32
【问题描述】:

calendly 小部件起初可以工作,但如果您刷新页面,它就会停止工作,但只有在网站上线时才会工作。在本地开发中,不会出现这样的问题。

还注意到,当我通过导航路由到页面时,它可以工作。但是如果我直接输入特定页面的链接,就不行了。

代码如下:

    <template>
  <client-only>
    <vue-calendly url="link" :height="650"></vue-calendly>
  </client-only>
</template>

<script>
import Vue from 'vue';

export default {
  created() {
    if (process.isClient) {
      const VueCalendly = require('vue-calendly').default;
      Vue.use(VueCalendly);
    }
  }
};
</script>

Vue 应用程序在 Gridsome 上运行,因此它是 SSR。我将小部件设置为仅在客户端显示。不知道是什么问题。

【问题讨论】:

    标签: vue.js server-side-rendering gridsome calendly


    【解决方案1】:

    有一种解决方案可以在不使用其小部件的情况下集成 Calendly。你也可以试试。此解决方案不应产生上述错误,并已在 SSR 应用程序中尝试过。

    <template>
      <!-- Calendly inline widget begin -->
      <div class="calendly-inline-widget" data-url="YOUR_CALENDLY_URL" style="min-width:320px;height:630px;"></div>
      <!-- Calendly inline widget end -->
    </template>
        
    <script>
    export default {
      mounted () {
        const recaptchaScript = document.createElement('script')
        recaptchaScript.setAttribute('src', 'https://assets.calendly.com/assets/external/widget.js')
        document.head.appendChild(recaptchaScript)
      }
    }
    </script>
    

    【讨论】:

      【解决方案2】:

      从this link,我们可以看到他正在导入组件

      import Vue from 'vue';
      import VueCalendly from 'vue-calendly';
      
      Vue.use(VueCalendly);
      

      然后用

      <vue-calendly url="your Calendly URL" :height="600"></vue-calendly>
      

      我不确定您是否在这里尝试使用像 es2020 import 这样的语法,但 require('vue-calendly').default 可能是这里的问题。

      尝试按照上面建议的基本方式导入它,然后如果您愿意,以后可以对其进行一些延迟加载。

      另外,您可以使用您的开发工具来查看为什么您的 Calendly 实例不存在。


      如果您有兴趣优化加载时间,Addy Osmani 写了一篇关于如何import on interaction 的精彩文章。如果不需要太多,只需使用通常的方法或更简单的方法,load the vanilla JS solution。

      【讨论】:

      • 我忘了说这个问题只有在网站上线时才会出现。在本地开发中,不会出现这样的问题。我尝试了这种导入格式,但我收到一个错误,说它必须写在“顶级”中。
      • 您是否将它安装在 Gridsome 的 main.js 文件中,并带有 Vue.use(VueCalendly); 等等?您是否将 calendly API 的 env 变量键添加到您的生产版本中?
      • 是的,小部件在您最初路由到它所在的页面时工作。但是如果你点击刷新,它就会消失。 HTML 元素的高度为 0。页面是空白的。
      • 您没有回答上述 2 个问题。另外,也许在if (process.isClient) { 之后尝试console.log 看看它是否到达其中的代码。
      • 日历链接设置正确,组件导入正确。我注意到的是,如果我直接将页面的完整 URL 打到浏览器中,它将无法正常工作。但是当我通过导航访问该页面时,它可以工作。
      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 2014-08-23
      • 2020-02-15
      • 1970-01-01
      • 2015-02-16
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多