2

鉴于此示例: https ://support.google.com/adwords/answer/3207306?hl=en&rd=1

如何将“排除代码段故障”部分下列出的代码转换为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标签?还是谷歌对它不那么挑剔?

4

3 回答 3

1

在与上述的许多变体讨价还价之后,我终于“作弊”了,只是使用 :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"}
于 2013-12-31T01:35:11.190 回答
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>
于 2013-09-16T21:19:19.250 回答
0

CDATAHTML 中并不真正需要该标记。目的是它允许<在 javascript 中使用诸如字面量之类的东西,而不必转义它们。CDATA部分有时与 XHTML 一起使用,但即便如此,浏览器通常也将 XHTML 视为 HTML。

使用 Haml,您可以将:javascript过滤器用于这样的块。如果您的文档格式是 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>

请注意,这使用标记//的注释而不是Google 页面建议的注释,但这无关紧要。CDATA/* ... */

于 2013-08-30T14:22:21.647 回答