DNN SiteAnalytics.config(Google 标签管理器?)阻止保存 DNN HTML 模块

DNN SiteAnalytics.config (Google Tag Manager?) Blocking Save for the DNN HTML Module

我们有一个网站,其中 Google 标签管理器似乎阻止了 HTML 模块中更改的保存。 GTM 是按照规范实施的,并且以我们期望的方式运行。

当 Google 标签管理器在页面上时 HTML 模块更改不会保存。当它被删除时,更改会正确保存。

没有 javascript 错误被抛出。没有记录 DNN 管理日志错误。

我正在寻找答案,希望其他人以前看过这个。

要插入 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>

到目前为止我已经尝试过:

今天继续。

这是一个奇怪的解决方案的奇怪问题,太奇怪了,我可能应该更改问题的标题。也许有这个问题的网站是 one-off 但以防万一这里是答案。

我发现不是 Google 分析代码导致了这个问题,而是 DNN 中的某些东西在 SiteAnalytics.config 和 DNN HTML 模块之间发生了冲突。在下面的代码片段中(来自 SiteAnalytics.config),我使用 XML:

为 GTM 插入了 noscript 标签
<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 在 Body 顶部注入任何内容会导致与该特定站点上的 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>