如何解决Google HTML 服务 - 评估模板并保留评论
我正在使用 Google 的 HTML 服务来评估 HTML 模板,然后将它创建的 HTML 作为电子邮件通过 Google 的邮件应用服务发送。我有以下代码可以为 Microsoft Office 客户端呈现不同的电子邮件:
<!--[if mso]><v:roundrect...v:roundrect><![end if]-->
<!--[if !mso]><td align='center'...</td><![endif]-->
我的问题是 HTML 服务将上述代码评估为已注释掉,并且传递给邮件应用程序的 HTML 中不再包含这些代码行。
我一直在用头撞墙,想弄清楚如何让 Google 的 HTML 服务不将这些视为评论。有什么想法吗?
谢谢!
解决方法
有一种在模板评估后保留 HTML
评论的迂回方法,但它有其自身的问题。
您首先将模板中的注释括在 CDATA
标签中。请参见下面的示例:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<![CDATA[<!-- This is a comment -->]]>
<p>GET - Gmail Push Notification Endpoint</p>
</body>
</html>
评估后,您将得到以下结果:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<!-- This is a comment -->
<p>GET - Gmail Push Notification Endpoint</p>
</body>
</html>
请注意,某些字符(<
和 >
)被编码为 html 实体,因此您需要以某种方式将它们转换回来。不幸的是,Javascript 没有本地方式来做到这一点,因此您要么必须编写自己的脚本来替换它们,要么使用现有的库。我做后者并利用 he
library。您可以在自己的 Apps 脚本项目中创建一个脚本文件,然后将该代码作为依赖项放入,或者将其放入自己的项目中,然后将其部署为专用的 Apps 脚本库。
现在您可以按如下方式将它们组合在一起:
// create template
let template = HtmlService
.createTemplateFromFile('template_with_comments_wrapped_in_CDATA_tags');
// add properties to template for evaluation
template.props = {...};
// get evaluated content as string
let evaluated = template
.evaluate()
.getContent();
// decode html entities
let decoded = he.decode(evaluated);
// return decoded as HtmlOutput
return HtmlService.createHtmlOutput().setContent(decoded);
就这样吧。
使用 CDATA
标签在模板中包含内容有很多应用,它甚至允许您使用非 HTML 内容作为模板,因此您可以使用此技术为各种内容创建模板(JSON 、RFC822 等)。这是您的工具库中的一个好技巧。
发生这种情况的原因是因为这些确实是HTML 注释。
查看此 reference 以了解如何在 HTML 中发表评论。
要解决您的问题,只需注释掉您的代码行(即删除 <!--
和 -->
):
[if mso]><v:roundrect...v:roundrect><![end if]
[if !mso]><td align='center'...</td><![end if]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。