Turbolinks 5 - демонтаж стороннего виджета (асинхронный) - PullRequest
0 голосов
/ 25 июня 2019

Я использую виджет FreshChat и теряю его при выполнении кэшированного посещения. Дело в том, что функция destroy () виджета является асинхронной, поэтому, хотя я выполняю ее для любого события, такого как «щелчок» или «до посещения», виджет все еще сохраняется при выполнении операции кэширования. Так что я получаю кешированную страницу с инициализированным виджетом, это нарушает виджет, и я не могу его заново инициировать. Если я вручную уничтожу его в консоли (перед каждым посещением), то все в порядке.

Вопрос в том, как сделать так, чтобы при посещении виджет был уничтожен ДО кэширования текущей страницы?

Примечания:

  • Виджет выполняется из менеджера тегов Google, используя пользовательское событие dataLayer
  • Событие 'before-cache' не помогло бы снова, это асинхронная операция.

1 Ответ

0 голосов
/ 26 июня 2019

Нашли решение!

function beforeVisit( event ) {
  if (!window.turbolinksVisitFlag) {
    event.preventDefault();
    if (window.fcWidget ) {
    window.fcWidget.destroy();
  }
  window.turbolinksVisitFlag = true;
  setTimeout(function(){Turbolinks.visit(event.data.url);}, 500);
}

Так что теперь я перехватываю каждый визит, делаю свои вещи и вручную запускаю следующий визит с таймаутом.

...