【问题标题】:DNN SiteAnalytics.config (Google Tag Manager?) Blocking Save for the DNN HTML ModuleDNN SiteAnalytics.config(Google 跟踪代码管理器?)阻止 DNN HTML 模块的保存
【发布时间】:2018-10-25 18:37:00
【问题描述】:

我们有一个网站,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>

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

今天继续。

【问题讨论】:

  • 会发生这样的冲突,我会说最好以一种可以识别页面处于“编辑模式”而不呈现 GTM sn-ps 的方式对其进行编码。
  • 确实没有足够的信息来帮助您。您是否确认这实际上是由于 GTM,而不是由于 GTM 中实现的某些标记(例如,很容易在自定义 HTML 标记中意外创建一个全局 js 变量,从而覆盖页面代码中的现有变量)。
  • 感谢您的想法。我确实喜欢在编辑模式下限制 GTM 的想法。至于缩小问题范围:我所拥有的只有 Universal Analytics 和一个捕获旧版 Google 事件推送的触发器,但我想我会删除我添加到 GTM 的所有内容,看看问题是否仍然存在。

标签: dotnetnuke google-tag-manager


【解决方案1】:

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

我发现不是 Google Analytics 代码导致了问题,而是 DNN 中的某些东西在 SiteAnalytics.config 和 DNN HTML 模块之间发生了冲突。在下面的代码 sn-p(来自 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 本身时,我的问题得到了解决。接下来,我尝试在将 InjectTop 从 True 更改为 False 时重新插入 noscript。这也解决了我的问题。

所以我所知道的是,使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 2016-01-21
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多