HTML 服務:限制

為避免使用者收到惡意 HTML 或 JavaScript,應用程式指令碼會使用 iframe 將 HTML 服務網頁應用程式或 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>

您也可以在包含網頁的標頭區段中,使用 <base> 標記覆寫這個屬性:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <div>
     <a href="http://google.com">Click Me!</a>
   </div>
 </body>
</html>

需要使用 HTTPS 才能放送動態內容

「Active」內容 (例如指令碼、外部樣式表和 XmlHttpRequests) 必須透過 HTTPS 載入,而非 HTTP。