Недопустимый HTML-код при добавлении кода поддержки чата Facebook с помощью Диспетчера тегов Google?

Я пытаюсь добавить модуль чата поддержки Facebook на свой сайт с помощью Диспетчера тегов Google.

Код, который я использую, генерируется Facebook, и все, что я делаю, это копирую его прямо в Диспетчер тегов Google, поэтому я не уверен, почему он не работает...

Он продолжает выдавать мне эту ошибку:

"В шаблоне обнаружен неверный HTML, CSS или JavaScript"

<!-- Load Facebook SDK for JavaScript -->
<div id = "fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      xfbml            : true,
      version          : 'v3.2'
    });
  };

  (function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<!-- Your customer chat code -->
<div class = "fb-customerchat"
  attribution=setup_tool
  page_id = "XXXXXXXXXXX"
  theme_color = "#111111">
</div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
4
0
961
2

Ответы 2

Диспетчер тегов Google использует инструмент (Компилятор закрытия), который проверяет достоверность JavaScript. В отличие от браузера, который обычно просто игнорирует нестандартные атрибуты, линтер в компиляторе Closure довольно строг и отказывается от вещей, которые он не понимает (моя обоснованная догадка заключается в том, что это необходимо - CC пытается оптимизировать Javascript, чтобы он работал быстрее, и если он не понимает, что делает часть вашего тега, он не может оптимизировать).

Поэтому, если вы получили это предупреждение, сначала проверьте биты, которые не являются стандартным HTML. Как было указано в другом ответе, такие атрибуты, как «атрибуция», «page_id» и «theme_color», являются хорошими кандидатами. Вам нужно будет удалить их один за другим, чтобы увидеть, сможете ли вы развернуть свой тег, а затем надеяться, что ваш чат все еще будет работать.

Я предполагаю, что вы добавили данный код в тег Пользовательский HTML GTM, и в этом случае обычный HTML не будет работать (<div class = "fb-customerchat" [...]</div>). Следовательно, данный код должен быть преобразован в javascript, чтобы работать.

Я бы следовал документации GTM и использовал Пользовательские (константы) переменные для хранения параметров или любой строки/значения. (Необязательно, это будет работать с жестко заданными значениями, такими как var page_id = '0123456789';)

В приведенном ниже примере я смешал оба метода для лучшего понимания.

<script>
(function() {
    // Sample variables
    var page_id = '{{FB - PageID}}';
    var ref = '';
    var theme_color = '{{FBChat - ThemeColor}}';
    var logged_in_greeting = 'Your greeting message for logged in users'; // Can be a Custom Constant Variable Sting
    var logged_out_greeting = 'Your greeting message for logged out users'; // Can be a Custom Constant Variable Sting

    // Do not edit
    var el = document.createElement('div');
    el.className = 'fb-customerchat';
    el.setAttribute('page_id', page_id);
    if (ref.length) {
        el.setAttribute('ref', ref);
    }
    el.setAttribute('theme_color', theme_color);
    el.setAttribute('logged_in_greeting', logged_in_greeting);
    el.setAttribute('logged_out_greeting', logged_out_greeting);
    document.body.appendChild(el);
})();
  
  // Facebook SDK for JavaScript : https://developers.facebook.com/docs/javascript/quickstart
    window.fbAsyncInit = function() {
    FB.init({
      appId      : '{{FB - AppID}}',
      xfbml      : true,
      // autoLogAppEvents : true,
      version    : 'v3.3'
    });
    // autoLogAppEvents replacement with logPageView
    FB.AppEvents.logPageView();
  };
  
  // Customer Chat SDK : https://developers.facebook.com/docs/messenger-platform/discovery/customer-chat-plugin/sdk#install
  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>

Другие вопросы по теме

Похожие вопросы

Возврат текста ближайшего нажатого элемента с атрибутом данных объявления (Диспетчер тегов Google)
Интерпретирует ли Диспетчер тегов Google переменную со строковым значением false как логическое значение false?
Как обновить Firebase Analytics с помощью диспетчера тегов Google, который уже существует в Google Analytics вместе с устаревшим диспетчером тегов Google (GTM)
Отслеживание событий исключенной Страницы
Есть ли способ запретить триггерам пользовательских событий переопределять предыдущий просмотр виртуальной страницы?
Можно ли включать разные теги в разные среды в GTM?
Отслеживание продаж Диспетчера тегов для компаратора цен
Диспетчер тегов Google с Facebook Analytics для приложений
Как заставить встроенный триггер YouTube GTM запускать видео, воспроизводимое в модальном режиме, созданном с помощью функции клика JS
Синтаксис украшения компоновщика Google Analytics