DNN SiteAnalytics.config (Google Tag Manager?) Блокировка Сохранить для модуля DNN HTML - PullRequest
0 голосов
/ 25 октября 2018

У нас есть сайт, на котором Google Tag Manager блокирует сохранение изменений в модуле HTML.GTM реализован в соответствии со спецификацией и функционирует иначе, чем мы ожидаем.

Когда Google Tag Manager находится на странице, изменения модуля HTML не сохраняются.После удаления изменений сохраните их правильно.

Никаких ошибок JavaScript не генерируется.Ошибки DNN Admin Log не записываются.

Я ищу ответы и надеюсь, что кто-то еще видел это раньше.

Чтобы вставить GTM, я использую следующее в качестве SiteAnalytics.config и GoogleAnalytics.config:

        <!-- SiteAnalytics.config -->
    <?xml version="1.0" encoding="utf-8" ?>
    <AnalyticsEngineConfig>
      <Engines>
        <AnalyticsEngine>
          <EngineType>DotNetNuke.Services.Analytics.GoogleAnalyticsEngine, DotNetNuke</EngineType>
          <ElementId>Head</ElementId>
          <InjectTop>True</InjectTop>
          <ScriptTemplate>
            <![CDATA[
        <!-- Google Tag Manager -->
        <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
        new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
        j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
        'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
        })(window,document,'script','dataLayer','[TRACKING_ID]');</script>
        <!-- End Google Tag Manager -->
        <script>
          window.dataLayer = window.dataLayer || [];
          function gtag(){dataLayer.push(arguments);}
          gtag('js', new Date());

          gtag('config', '[TRACKING_ID]');
        </script>
            ]]>
          </ScriptTemplate>
        </AnalyticsEngine>
        <AnalyticsEngine>
          <EngineType>DotNetNuke.Services.Analytics.GoogleAnalyticsEngine, DotNetNuke</EngineType>
          <ElementId>Body</ElementId>
          <InjectTop>True</InjectTop>
          <ScriptTemplate>
            <![CDATA[
        <!-- Google Tag Manager (noscript) -->
        <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=[TRACKING_ID]"
        height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
        <!-- End Google Tag Manager (noscript) -->            
            ]]>
          </ScriptTemplate>
        </AnalyticsEngine>
      </Engines>
    </AnalyticsEngineConfig>

    <!-- GoogleAnalytics.config -->   
    <?xml version="1.0" encoding="utf-8"?>
        <AnalyticsConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <Settings>
            <AnalyticsSetting>
              <SettingName>TrackingId</SettingName>
              <SettingValue>GTM-CODEHERE</SettingValue>
            </AnalyticsSetting>
            <AnalyticsSetting>
              <SettingName>UrlParameter</SettingName>
              <SettingValue />
            </AnalyticsSetting>
            <AnalyticsSetting>
              <SettingName>TrackForAdmin</SettingName>
              <SettingValue>true</SettingValue>
            </AnalyticsSetting>
          </Settings>
        </AnalyticsConfig>

Пока я пытался:

Продолжение сегодня.

1 Ответ

0 голосов
/ 06 ноября 2018

Это была странная проблема с незнакомым решением, настолько странная, что мне, вероятно, следовало бы изменить название вопроса.Может быть, сайт с этой проблемой был разовым, но на всякий случай вот ответ.

Я обнаружил, что проблема была не в коде Google Analytics, а в DNN, что конфликтовало между SiteAnalytics.configи модуль HTML DNN.В приведенном ниже фрагменте кода (из SiteAnalytics.config) я вставлял тег noscript для GTM с использованием этого XML:

<AnalyticsEngine>
  <EngineType>DotNetNuke.Services.Analytics.GoogleAnalyticsEngine, DotNetNuke</EngineType>
  <ElementId>Body</ElementId>
  <InjectTop>True</InjectTop>
  <ScriptTemplate>
    <![CDATA[
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=[TRACKING_ID]"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->            
    ]]>
  </ScriptTemplate>
</AnalyticsEngine>

Я случайно обнаружил, что моя проблема была решена, когда я удалил все между тегами CDATA иливесь CDATA сам.Затем я попытался повторно вставить noscript при изменении InjectTop с True на False.Это также решило мою проблему.

Итак, я знаю, что внедрение чего-либо в верхнюю часть тела с помощью SiteAnalytics.config вызвало конфликт с модулем DNN HTML на этом конкретном сайте.Можно предположить, что это происходит из-за плохого HTML-кода на странице или нестандартного сценария, вызывающего конфликт.Тем не менее, я проверил шаблон через W3C, и никаких проблем не возникло.Я также удалил все наши собственные скрипты безрезультатно.Таким образом, точный механизм первоначального конфликта неизвестен, но проблема решена.Ниже обновленный код:

    <!-- SiteAnalytics.config -->
<?xml version="1.0" encoding="utf-8" ?>
<AnalyticsEngineConfig>
  <Engines>
    <AnalyticsEngine>
      <EngineType>DotNetNuke.Services.Analytics.GoogleAnalyticsEngine, DotNetNuke</EngineType>
      <ElementId>Head</ElementId>
      <InjectTop>True</InjectTop>
      <ScriptTemplate>
        <![CDATA[
    <!-- Google Tag Manager -->
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','[TRACKING_ID]');</script>
    <!-- End Google Tag Manager -->
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());

      gtag('config', '[TRACKING_ID]');
    </script>
        ]]>
      </ScriptTemplate>
    </AnalyticsEngine>
    <AnalyticsEngine>
      <EngineType>DotNetNuke.Services.Analytics.GoogleAnalyticsEngine, DotNetNuke</EngineType>
      <ElementId>Body</ElementId>
      <InjectTop>False</InjectTop>
      <ScriptTemplate>
        <![CDATA[
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=[TRACKING_ID]"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->            
        ]]>
      </ScriptTemplate>
    </AnalyticsEngine>
  </Engines>
</AnalyticsEngineConfig>

<!-- GoogleAnalytics.config -->   
<?xml version="1.0" encoding="utf-8"?>
    <AnalyticsConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Settings>
        <AnalyticsSetting>
          <SettingName>TrackingId</SettingName>
          <SettingValue>GTM-CODEHERE</SettingValue>
        </AnalyticsSetting>
        <AnalyticsSetting>
          <SettingName>UrlParameter</SettingName>
          <SettingValue />
        </AnalyticsSetting>
        <AnalyticsSetting>
          <SettingName>TrackForAdmin</SettingName>
          <SettingValue>true</SettingValue>
        </AnalyticsSetting>
      </Settings>
    </AnalyticsConfig>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...