【问题标题】:$zopim is not defined$zopim 未定义
【发布时间】:2017-09-09 05:43:23
【问题描述】:

阅读 Zopim(又名 Zendesk Chat)的 the documentation

API 调用必须在实时聊天脚本之后插入并包含在 $zopim(function() { ... }) 中

所以我在 HTML 的head 部分有一个 Zopim 脚本:

<script>/*<![CDATA[*/window.zEmbed||function(e,t){ ... }("https://...);
/*]]>*/</script>

然后我在 HTML 文档的末尾添加了这个:

$zopim(function() {
  $zopim.livechat.setName('Logged in name');
  $zopim.livechat.setEmail('user@somewhere.com');
});

控制台说:

$zopim 未定义

我想我已经正确地关注了the instructions。我错过了什么?

【问题讨论】:

  • 你解决了吗?我也有同样的问题
  • 没有。我写了一个带有超时的丑陋黑客,我会发布它作为答案

标签: javascript zendesk zopim


【解决方案1】:

我找到了更好的解决方案(在提交支持请求后)

    zE(function() {
        $zopim(function() {
            $zopim.livechat.setName("{{\Auth::user()->name}}");
            $zopim.livechat.setEmail("{{\Auth::user()->email}}");
        });
    });

我在 Zendesk 支持中使用 Zendesk 聊天代码,这就是为什么我需要添加 Ze 功能以使其使用 api 工作。

编辑:检查来自Jay Hewittinteresting comment 以及他的answer on this question

【讨论】:

  • 这取决于您嵌入 javascript 的方式。如果您使用的是 $zopim javascript,这将不起作用,但如果您使用的是 Zendesk Widget (zEmbed),那么您仍然会遇到在运行之前没有加载 zE(或 zEmbed)的问题,所以即使在这个实例,你需要一个等待循环。
  • 感谢@Freefri,这解决了错误,但在我的情况下,小部件未在 Chrome 上显示,在 Firefox 上它在首次加载后显示。我正在使用 Angular 8
【解决方案2】:

这将循环,等待 $zopim 和 $zopim.livechat 被加载。 一旦它们被加载,它将停止循环。

var waitForZopim = setInterval(function () {
    if (window.$zopim === undefined || window.$zopim.livechat === undefined) {
        return;
    }
    $zopim(function() {
        $zopim.livechat.setName("{{\Auth::user()->name}}");
        $zopim.livechat.setEmail("{{\Auth::user()->email}}");
    });
    clearInterval(waitForZopim);
}, 100);

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多