给出这个例子: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
标签?或者谷歌不是那么挑剔吗?
答案 0 :(得分:1)
你可以在行的开头使用\来转义/ haml。我遇到了同样的问题,以下内容让我在我们的网站中加入了谷歌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>
答案 1 :(得分: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"}
答案 2 :(得分:0)
HTML中并不真正需要CDATA
标记。目的是允许在javascript中使用文字<
之类的东西而不必逃避它们。 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>
请注意,这会对//
标记使用CDATA
条评论,而不是Google页面建议的/* ... */
条评论,但这无关紧要。