HTML 服務:限制

為防止使用者受到惡意 HTML 或 JavaScript 攻擊,Apps Script 會在沙箱 HTML 服務網頁應用程式或 Google 文件、試算表與表單的自訂使用者介面中使用 iframe。(其他情況下,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

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