67104


すみません．Web系まったく素人ですので教えてください．

Googleアナリティクスのために以下のようなコードをHTMLに埋め込まねばなりません．手書きのHTMLではないので、このXMLファイルをXMLとして読み込んでルート要素の下位をXSLTスタイルシートでHTMLに入れこんでやります．

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <script>
    <!-- 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','XXX-YYYYYYY');</script>
    <!-- End Google Tag Manager -->
    
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=XXX-YYYYYYY"
        height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->
    
    </script>
    
[/code]

ここで問題になるのがJavaScript中の`&`です．XMLとして読むためには`&amp;`とエスケープしなければなりません．しかしこうすると、埋め込んだHTMLの方でも`&amp;`のままです．

`&`はHTMLとしてブラウザが処理する場合、もしくはJavaScriptのエンジンが処理する場合、どのようにするのが一番適切でしょうか？

Webを読むとJavaScriptはコメントで埋め込めるような記述もあります．例えば以下のような感じです．

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <script>
    <!-- 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','XXX-YYYYYYY');
    //-->
    </script>
    <!-- End Google Tag Manager -->
    
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=XXX-YYYYYYY"
        height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->
    
    </script>
    
[/code]

悲しいながらHTMLに入れたあとのテストができないので、どうするのが正解かわかりません．

スマートな方法がありましたら教えてください．


CC BY-SA 4.0
2020-05-28T04:42:53.480
67069
2020-05-29T07:14:34.933
2020-05-28T05:53:35.267
9503
9503
question
javascript html google-analytics
GAのJavascript埋め込み時の'&'の扱い方はどうしたらよいのでしょう？


自己RESです．

まず、`&amp;`をJavaScript中に残すことはダメなようです．以下に解説がありました．

[カスタム
パラメータの形式に関するよくある問題を解決する：アンパサンド（&）について](https://support.google.com/google-
ads/answer/7280698?hl=ja)

また、JavaScriptのコードを`<!--`と`-->`で囲む方法は、後方互換性のためのみに残されているようです．なので後方互換性にしがみつくようなことはあまりしたくない．

[コメント：[ES2015] HTML-likeコメント](https://jsprimer.net/basic/comments/)

あとXMLとして読み込み、HTMLのfragmentとして書き出すのは、使用しているアプリケーションがXSLTでやっているのですが、このXSLTはカスタマイズできるように外部にExtension
Pointを提供してくれていました．

このため、Extension PointにXSLTスタイルシートのテンプレートを書いて

[code]

    <xsl:template match="script/text()">
      <xsl:value-of select ="." disable-output-escaping="yes"/>
    </xsl:template>
    
[/code]

とやれば書き出すHTML中のJavaScriptには`&amp;`は`&`として書き出すことができます．

と言う訳で、最終的には

  * 読み込むXMLの中では`&`は`&amp;`と書いてXMLとしてエラーの無いようにし
  * HTMLに書き出す際には`&amp;`は、`&`として出す

というのが良いようです．この方法を採用したいと思います．


CC BY-SA 4.0
2020-05-29T00:33:45.833
67104
2020-05-29T07:14:34.933
2020-05-29T07:14:34.933
9503
9503
67069
answer