【问题标题】:Parse error in Google Tag Manager script in XML PackageXML 包中的 Google 跟踪代码管理器脚本中的解析错误
【发布时间】:2015-12-30 08:03:18
【问题描述】:

我有一个网上商店,运行 ASPDOTNETSTOREFRONT。

我正在尝试向一组网页添加自定义跟踪脚本行。

为此,我将 Google 跟踪代码管理器脚本添加到这些页面使用的 XML 包中,因此它会出现在我要跟踪的所有页面上。

我只是将 Google 跟踪代码管理器脚本复制并粘贴到我的 XML 包中。

`<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-5HD6WH"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<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=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5HD6WH');</script>
<!-- End Google Tag Manager -->`

但是当我尝试使用这个包加载页面时,它给出了以下错误。

Exception=Error in XmlPackage(.Load), Package=[product.engineproduct.xml.config], Msg=[Exception=An error occurred while parsing EntityName. Line 246, position 42.
]

所以人们可以看到行号和位置,我可以显示来自 XML 包的屏幕截图(源代码)。

http://i.stack.imgur.com/mJ2Tb.jpg

有人对如何解决这个问题有任何建议吗?

【问题讨论】:

    标签: asp.net xml xml-parsing google-tag-manager aspdotnetstorefront


    【解决方案1】:

    尝试将脚本内容放入 CDATA:

    <!-- Google Tag Manager -->
    <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-5HD6WH"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>
    <![CDATA[
    (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=
    '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-5HD6WH');
    ]]>
    </script>
    <!-- End Google Tag Manager -->
    

    【讨论】:

    • 这个答案怎么没有几百票?非常感谢你!
    【解决方案2】:

    一年后...我在 DNN 7.4.2 中遇到了同样的问题。

    我在 httpdocs/SiteAnalytics.config 中有类似的内容

    <?xml version="1.0" encoding="utf-8" ?>
    <AnalyticsEngineConfig>
        <Engines>
            <AnalyticsEngine>
                <EngineType>DotNetNuke.Services.Analytics.GoogleAnalyticsEngine, DotNetNuke</EngineType>
                <ElementId>Head</ElementId>
                <InjectTop>False</InjectTop>
                <ScriptTemplate>
    
                    <!-- Google Tag Manager -->
    
                    <script type="text/javascript">
    
              (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 -->
    
                    <!-- documented... we would like to disable it by now
            <![CDATA[     
    
                    <script type="text/javascript">
                      var _gaq = _gaq || [];
                      _gaq.push(['_setAccount', '[TRACKING_ID]']);
                      _gaq.push(['_trackPageview']);
                      [PAGE_URL]
    
                      (function() {
                        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
                        ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
                        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
                      })();
                    </script>
    
              ]]>
              -->
                </ScriptTemplate>
            </AnalyticsEngine>
        </Engines>
    </AnalyticsEngineConfig>
    

    请看,我知道我将把它作为手动更改(但是,正如我现在所看到的,我认为将新的谷歌标签管理器与 DNN 功能和菜单集成将非常容易)。

    @dubloons 提议的更改对我不起作用,所以我这样做了:

    <?xml version="1.0" encoding="utf-8" ?>
    <AnalyticsEngineConfig>
        <Engines>
            <AnalyticsEngine>
                <EngineType>DotNetNuke.Services.Analytics.GoogleAnalyticsEngine, DotNetNuke</EngineType>
                <ElementId>Head</ElementId>
                <InjectTop>False</InjectTop>
                <ScriptTemplate>
    
                    <!-- Google Tag Manager -->
            <![CDATA[
                    <script type="text/javascript">
    
              (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 -->
    
                    <!-- documented... we would like to disable it by now
            <![CDATA[     
    
                    <script type="text/javascript">
                      var _gaq = _gaq || [];
                      _gaq.push(['_setAccount', '[TRACKING_ID]']);
                      _gaq.push(['_trackPageview']);
                      [PAGE_URL]
    
                      (function() {
                        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
                        ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
                        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
                      })();
                    </script>
    
              ]]>
              -->
                </ScriptTemplate>
            </AnalyticsEngine>
        </Engines>
    </AnalyticsEngineConfig>
    

    如您所见,我在 CDATA 中使用了 al 脚本标记,而不仅仅是 JS 代码。 将类似于 GTM-XXXXXX。 如您所见,Tracking ID 是由 know 硬编码的,但这是另一个问题;D。

    【讨论】:

      猜你喜欢
      • 2015-05-28
      • 2020-08-12
      • 2021-03-26
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 2016-01-21
      相关资源
      最近更新 更多