обратный вызов zopim никогда не вызывается - PullRequest
0 голосов
/ 04 сентября 2018

Следуя инструкциям этой документации , я получаю следующий код:

window.zEmbed || (function (d, s) {
          var z = $zopim = function (c) { z._.push(c) },
              $ = z.s =
          d.createElement(s), e = d.getElementsByTagName(s)[0]; z.set = function (o) {
              z.set.
              _.push(o)
          }; z._ = []; z.set._ = []; $.async = !0; $.setAttribute("charset", "utf-8");
          $.onload = (event) => {
              console.log("chat script has loaded");
          };
          $.src = "//v2.zopim.com/?@zopimClientID"; z.t = +new Date; $.
              type = "text/javascript"; e.parentNode.insertBefore($, e);   
      })(document, "script");

      var onChatStart = function () {
          $zopim.livechat.window.show();
          window['onChatStart'] && window['onChatStart']();
      };

      $zopim(function () {
          $zopim.livechat.clearAll();
          (......)
      });

Проблема в том, что функция обратного вызова $zopim(funtion() {..}) никогда не вызывается, но скрипт успешно загружен. Я знаю на основе console.log, сделанного:

$.onload = (event) => {
     console.log("chat script has loaded");
};

Кто-нибудь знает, почему это происходит? Спасибо

1 Ответ

0 голосов
/ 22 мая 2019

Проблема в том, что вы запускаете скрипт $zopim до его полной загрузки. Как только все части объекта $zopim загрузятся, он прекратит цикл и запустит ваш скрипт.

var zopimConfig = function() {
    $zopim(function() {
        $zopim.livechat.clearAll();
        (......)
    });
};

var waitForZopim = setInterval(function () {
    if (
        window.$zopim === undefined ||
        window.$zopim.livechat === undefined ||
        window.$zopim.livechat.departments === undefined
    ) {
        return;
    }
    zopimConfig();
    clearInterval(waitForZopim);
}, 100);

Ожидание window.$zopim.livechat.departments необязательно, однако, если вы что-то делаете в отделах, я бы рекомендовал оставить это

...