遷移至 IFRAME 沙箱模式

Apps Script 使用安全沙箱 可為「 Google Workspace」提供防護 以及某些情況下能處理的 AI 應用方式所有語言 現已停用沙箱模式,但 IFRAME 除外。使用舊版沙箱的應用程式 模式現在會自動使用新的 IFRAME 模式。

先前透過 HTML 服務使用這些舊版模式的應用程式,可能需要 變更 IFRAME 模式,以解決下列差異:

  • 您現在必須使用 target="_top"target target="_blank"
  • HTML 服務提供的 HTML 檔案必須包含 <!DOCTYPE html>、<html> 和 <body>標籤
  • Google 原生載入器程式庫 api.js 不會在 IFRAME 模式下自動載入
  • 挑選器使用者需撥打電話 setOrigin(),因為內容來自新網域
  • 不支援部分舊版瀏覽器 (包括 IE9)
  • 匯入的資源現在必須使用 HTTPS
  • 系統已不再預設禁止提交表單

以下各節將詳細說明這些差異。

IFRAME 模式中,您必須將連結目標屬性設為 _top_blank

Code.js

function doGet() {
  var template = HtmlService.createTemplateFromFile('top');
  return template.evaluate();
}

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>

頂層 HTML 標記

NATIVE (和 EMULATED) 沙箱模式下,特定 HTML 標記會是 自動加入 Apps Script 的 .html 檔案,但只有在 使用 IFRAME 模式

為確保使用 IFRAME 正確提供專案頁面,請將 網頁內容如下:

<!DOCTYPE html>
<html>
  <body>
    <!-- Add your HTML content here -->
  </body>
</html>

原生 JavaScript 載入器程式庫必須明確載入

仰賴自動載入原生載入器程式庫 api.js 的指令碼 必須改為明確載入此程式庫,如以下範例所示:

<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>

Google Picker API 變更

使用 Google Picker API 時,您現在必須在建構時呼叫 setOrigin() PickerBuilder 並傳入來源 google.script.host.origin,如下所示 在以下範例中:

function createPicker(oauthToken) {
  var picker = new google.picker.PickerBuilder()
      .addView(google.picker.ViewId.SPREADSHEETS) // Or a different ViewId
      .setOAuthToken(oauthToken)
      .setDeveloperKey(developerKey)
      .setCallback(pickerCallback)
      .setOrigin(google.script.host.origin) // Note the setOrigin
      .build();
  picker.setVisible(true);
}

如需完整工作範例,請參閱 檔案開啟對話方塊

瀏覽器支援

IFRAME 沙箱模式的基礎是 iframe 沙箱機制 功能。 部分較舊的瀏覽器 (例如 Internet Explorer 9) 不支援此功能。這個 如果下列兩者皆是 Apps Script 專案,可能會發生問題:

  • 使用 HtmlService,且
  • 先前使用 EMULATEDNATIVE 沙箱

將這些應用程式遷移至 IFRAME 沙箱模式後,這些應用程式可能無法繼續運作 部分不支援 HTML5 iframe 的舊版瀏覽器 (特別是 IE9 和更舊版本) 沙箱功能。

已要求 IFRAME 模式或完全未使用 HtmlService的應用程式 而不會有受到此問題影響

匯入的資源現在必須使用 HTTPS

先前使用 HTTP 匯入資源的舊版應用程式必須變更為 請改用 HTTPS

系統已不再預設禁止提交表單

系統禁止實際提交以 NATIVE 使用沙箱模式的 HTML 表單 以及瀏覽頁面因此,開發人員只需要新增 onclick 傳送到提交按鈕,因此不必擔心後續發生了什麼事。

使用 IFRAME 模式時,可以提交 HTML 表單,且 元素未指定 action 屬性,該屬性會提交至空白頁面。 更糟的是,內部 iframe 會在 onclick 之前重新導向至空白網頁 處理常式有機會完成。

解決方法是將 JavaScript 程式碼加入用來防止表單 確保點擊處理常式有時間 函式:

<script>
  // Prevent forms from submitting.
  function preventFormSubmit() {
    var forms = document.querySelectorAll('form');
    for (var i = 0; i < forms.length; i++) {
      forms[i].addEventListener('submit', function(event) {
        event.preventDefault();
      });
    }
  }
  window.addEventListener('load', preventFormSubmit);
</script>

完整範例請見 HtmlService 指南 用戶端對伺服器通訊