Ошибка синтаксического анализа в скрипте Диспетчера тегов Google в XML-пакете

У меня есть интернет-магазин под управлением 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

У кого-нибудь есть предложения, как это исправить?


person Brendan Gooden    schedule 02.10.2015    source источник


Ответы (2)


Попробуйте поместить содержимое скрипта в 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 -->
person dubloons    schedule 05.10.2015
comment
как этот ответ не имеет сотен голосов? Дублоны большое спасибо! - person cosbor11; 18.10.2015

И 1 год спустя... У меня была такая же проблема в 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>

Видите ли, я оставляю это как ручное изменение (но, как я вижу сейчас, я думаю, что будет очень легко интегрировать новый менеджер тегов Google с функциями и меню 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>

Как видите, я окружил тег al script внутри CDATA, а не только в коде JS. будет что-то вроде GTM-XXXXXX. Как видите, идентификатор отслеживания жестко запрограммирован, но это уже другая проблема ;D.

person Juan Ignacio Avendaño Huergo    schedule 03.04.2017