【问题标题】:Google AdWord Example to haml谷歌 AdWord 示例到 haml
【发布时间】:2013-08-28 22:05:14
【问题描述】:

举个例子:https://support.google.com/adwords/answer/3207306?hl=en&rd=1

如何将“排除您的代码 sn-p”部分列出的代码转换为 haml?

我最接近的是:

%script{:type=>"text/javascript"}
  :cdata
    var google_conversion_id = 123456789;
    var google_conversion_language = "en";
    var google_conversion_format = "3";
    var google_conversion_color = "ffffff";
    var google_conversion_label = "AAAAAAAAAAAAAAAAAAA";
    var google_conversion_value = 0;
    var google_remarketing_only = false;
%script{:type => "text/javascript", :src => "//www.googleadservices.com/pagead/conversion.js"}
%noscript
  %div{:style => "display:inline;"}
    %img{:height => "1", :width => "1", :style => "border-style:none;", :alt => "", :src => "//www.googleadservices.com/pagead/conversion/123456789/?value=0&label= AAAAAAAAAAAAAAAAAAA&guid=ON&script=0".html_safe}

上面的问题是:cdata标签产生:

<script type="text/javascript">
    <![CDATA[
        var google_conversion_id = 123456789;
        var google_conversion_language = "en";
        var google_conversion_format = "3";
        var google_conversion_color = "ffffff";
        var google_conversion_label = "AAAAAAAAAAAAAAAAAAA";
        var google_conversion_value = 0;
        var google_remarketing_only = false;

    ]]>
</script>

而不是:

<script type="text/javascript">
   /* <![CDATA[ */
   var google_conversion_id = 123456789;
   var google_conversion_language = "en";
   var google_conversion_format = "2";
   var google_conversion_color = "ffffff";
   var google_conversion_label = "AAAAAAAAAAAAAAAAAAA";
   var google_conversion_value = 0;
   /* ]]> */
</script>

有没有办法显式声明CDATA 标签?还是谷歌对它不那么挑剔?

【问题讨论】:

    标签: haml google-ads-api


    【解决方案1】:

    你可以在 haml 中用 \ 在行的开头转义 /。我遇到了同样的问题,以下对我有用,以便在我们的网站中包含 google adwords 转换跟踪代码:

    <script type="text/javascript">
    \/* <![CDATA[ */
    var google_conversion_id = 123456789;
    var google_conversion_language = "en";
    var google_conversion_format = "2";
    var google_conversion_color = "ffffff";
    var google_conversion_label = "AAAAAAAAAAAAAAAAAAA";
    var google_conversion_value = 0;
    \/* ]]> */
    </script>
    

    经过haml处理后变成:

    <script type="text/javascript">
    /* <![CDATA[ */
    var google_conversion_id = 123456789;
    var google_conversion_language = "en";
    var google_conversion_format = "2";
    var google_conversion_color = "ffffff";
    var google_conversion_label = "AAAAAAAAAAAAAAAAAAA";
    var google_conversion_value = 0;
    /* ]]> */
    </script>
    

    【讨论】:

      【解决方案2】:

      在与上述的许多变体讨价还价之后,我最终“作弊”并使用 :plain 标签完全按照我想要的方式得到它。下面的代码完全复制了 Google Analytics 示例页面上的内容,Chrome 的 Google Tag Assistant 插件确认它可以正常通过。注意:我还必须将 googleadservices 链接更改为 HTTPS,以便它与我的页面的其余部分匹配(这导致了其他难以解决的问题,并且 Tag Assistant 帮助解决了它)。

      这应该为你做:

      %script{:type=>"text/javascript"}
        :plain
          /* <![CDATA[ */
          var google_conversion_id = 123456789;
          var google_conversion_language = "en";
          var google_conversion_format = "3";
          var google_conversion_color = "ffffff";
          var google_conversion_label = "AAAAAAAAAAAAAAAAAAA";
          var google_conversion_value = 0;
          var google_remarketing_only = false;
          /* ]]> */
      %script{:type => "text/javascript", :src => "https://www.googleadservices.com/pagead/conversion.js"}
      

      【讨论】:

        【解决方案3】:

        CDATA 标签在 HTML 中并不是真正需要的。目的是它允许在 javascript 中使用文字 &lt; 之类的东西,而不必转义它们。 CDATA 部分有时与 XHTML 一起使用,但即便如此,XHTML 通常也会被浏览器视为 HTML。

        使用 Haml,您可以将 :javascript filter 用于这样的块。如果您的文档格式是 XHTML,这将添加 CDATA 部分,否则将其省略。如果格式为 HTML5,它还将省略 type 属性,因为在这种情况下默认为 text/javascript

        所以:

        :javascript
          var google_conversion_id = 123456789;
          // etc ...
        

        当格​​式为 HTML5(默认)时会产生这个

        <script>
          var google_conversion_id = 123456789;
          // etc ...
        </script>
        

        当格​​式为 XHTML 时:

        <script type='text/javascript'>
          //<![CDATA[
            var google_conversion_id = 123456789;
            // etc ...
          //]]>
        </script>
        

        请注意,这使用 // cmets 作为 CDATA 标记,而不是 Google 页面建议的 /* ... */,但这不重要。

        【讨论】:

        • 根据谷歌的说法,CDATA 标签需要它才能正常工作。此外,脚本标签必须明确设置为&lt;script type='text/javascript'&gt; - 主要是无赖。现在,我只是使用跟踪像素来实现调用,但我想让 JS 正常工作。还有其他想法吗?
        • @CDub 我怀疑谷歌只是对他们在那个页面上的说明有点保守——javascript应该在没有CDATA部分或type属性的浏览器中运行。如果您想真正确定生成的内容,可以使用 :plain filter 并逐字包含 javascript 块。
        猜你喜欢
        • 2016-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        相关资源
        最近更新 更多