为了保护用户免受恶意 HTML 或 JavaScript 的侵害,HTML 服务使用 iframe 对 Google 文档、Google 表格和 Google 表单的 Web 应用或自定义界面进行沙盒处理。在其他情况下,例如生成电子邮件正文时,HTML 服务不会使用沙盒。沙盒对客户端代码施加了限制。
沙盒模式
除了 IFRAME 之外,所有沙盒模式都将停用。之前使用 NATIVE 或 EMULATED 模式的应用现在会自动使用 IFRAME 模式。如果您的脚本是使用旧版模式开发的,请按照迁移说明操作,以确保脚本正常运行。
现在,调用 setSandboxMode 方法时不会产生任何效果。
iframe 模式下的限制
IFRAME 沙盒模式基于 HTML5 中的 iframe 沙盒化功能,使用以下关键字:
allow-same-originallow-formsallow-scriptsallow-popupsallow-downloadsallow-modalsallow-popups-to-escape-sandboxallow-top-navigation-by-user-activation- 此属性仅针对独立脚本项目设置。
allow-top-navigation 关键字允许内容导航到其顶级浏览上下文,但该关键字受到限制,并且未在沙盒中设置为属性。如果您需要重定向脚本,请添加一个链接或按钮,以便用户采取相应操作。
设置链接目标属性
在 IFRAME 模式下,您需要将链接目标属性设置为 _top 或 _blank:
Code.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
top.html
<!DOCTYPE html>
<html>
<body>
<div>
<a href="http://google.com" target="_top">Click Me!</a>
</div>
</body>
</html>
您还可以使用封装网页的 head 部分中的 <base> 标记替换此属性:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
对于有效内容,必须使用 HTTPS
脚本、外部样式表和 XmlHttpRequest 等“主动”内容必须通过 HTTPS 加载,而不是 HTTP。