【问题标题】:Dynamically Script Loading Zendesk Widget动态脚本加载 Zendesk 小部件
【发布时间】:2019-03-10 20:56:24
【问题描述】:

我一直在尝试通过不加载 Zendesk Widget 来节省页面上的资源,除非需要。

如果我手动将以下标签添加到页面,一切正常:

<script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=[MyKey]> </script>

作为我页面的一部分,我总是有一个 div 标签:

<div id="ze-snippet"> </div>

我想要的是,当用户单击按钮时,对 &lt;script&gt; 标记执行“动态脚本加载”。

我目前的尝试是这样的:

window.onload = function () {
  var zendeskWidgetOn = false;
  document.getElementById('enable-zendesk-widget').addEventListener('click', function( event ) {
    if (!zendeskWidgetOn) {
      zendeskWidgetOn=true;
      (function(d, script) {
        script = d.createElement('script');
        script.type = 'text/javascript';
        script.async = true;
        script.onload = function(){
          console.log('script finished loading ...');
        };
        script.src = 'https://static.zdassets.com/ekr/snippet.js?key=[my key]';
        d.getElementsByTagName('head')[0].appendChild(script);
      }(document));
    }
  }, false);
};

我不断遇到的错误是:

【问题讨论】:

    标签: javascript zendesk dynamic-script-loading


    【解决方案1】:

    要仅在单击按钮时加载小部件脚本,您只需将其插入到您的 html 中:

    <script>
      function loadZendeskWidget() {
          var script = document.createElement('script');
          script.type = 'text/javascript';
          script.id = 'ze-snippet';
          script.async = true;
          script.src = 'https://static.zdassets.com/ekr/snippet.js?key=<key>';
          document.getElementsByTagName('head')[0].appendChild(script);
      };
    </script>
    

    只需将“key”替换为您自己的小部件键即可。

    希望这会有所帮助。

    【讨论】:

    • 它确实让我走上了正确的道路来得到我的答案,但我不明白为什么你的解决方案有效而我的却没有,因为你的解决方案和我做的完全一样,只有我的解决方案是IIFE,所以我可以将我的东西很好地包裹在一个闭包中,你的也可以放在一个独立的
    • 如果您正在使用 react 并尝试应用自定义“zESettings”,例如偏移垂直高度,这就是要走的路!必须在 zendesk 脚本加载之前设置自定义设置。
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 2015-06-28
    • 2014-03-10
    • 2023-03-11
    • 2023-03-11
    • 2023-04-09
    • 2014-07-27
    • 2011-10-24
    相关资源
    最近更新 更多