HTML 服务:限制

为防止用户受到恶意 HTML 或 JavaScript 的侵害,Apps 脚本使用 iframe 来沙盒化 HTML 服务 Web 应用或 Google 文档、表格和表单的自定义界面。(在其他情况下,例如生成电子邮件正文时,HTML 服务不会使用沙盒。)沙盒对客户端代码施加了限制。

沙盒模式

IFRAME 之外,所有沙盒模式现已停用。使用旧版沙盒模式的应用现在会自动使用新版 IFRAME 模式。如果您有使用旧模式(NATIVEEMULATED)开发的脚本,则应按照迁移说明操作,以确保这些脚本在 IFRAME 模式下正常运行。

现在,调用 setSandboxMode 方法时不会产生任何效果。

iframe 模式下的限制

IFRAME 沙盒模式基于 HTML5 中的 iframe 沙盒化功能,使用以下关键字:

  • allow-same-origin
  • allow-forms
  • allow-scripts
  • allow-popups
  • allow-downloads
  • allow-modals
  • allow-popups-to-escape-sandbox
  • allow-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)加载。