Apps Script 在某些情況下,會使用安全沙箱為 Google Workspace應用程式提供防護隔離功能。目前所有沙箱模式均全面停用,除了 IFRAME
以外。使用舊版沙箱模式的應用程式現在會自動使用新版 IFRAME
模式。
先前搭配 HTML 服務使用這些舊版模式的應用程式,可能需要對 IFRAME
模式進行變更,才能解決下列差異:
- 您現在必須使用
target="_top"
或target="_blank"
覆寫連結的target
屬性 - HTML 服務提供的 HTML 檔案必須包含 <!DOCTYPE html>、<html> 和 <body> 標記
IFRAME
模式下不會自動載入 Google 原生載入器程式庫api.js
- Picker 使用者需要呼叫
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>
您也可以在封閉式網頁的 head 區段內使用 <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 時,您現在必須在建構 PickerBuilder 時呼叫 setOrigin()
,並傳入來源 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
沙箱模式以 HTML5 中的 iframe 沙箱功能為基礎。部分較舊的瀏覽器 (例如 Internet Explorer 9) 不支援此功能。如果您的 Apps Script 專案同時有下列兩項情況,則可能會發生問題:
- 使用
HtmlService
,且 - 先前使用
EMULATED
或NATIVE
沙箱
將應用程式遷移至 IFRAME
沙箱模式後,它們可能無法在部分不支援 HTML5 iframe 沙箱功能的舊版瀏覽器 (特別是 IE9 以下版本) 上運作。
已要求 IFRAME
模式或完全未使用 HtmlService
的應用程式不會受到這個問題影響。
匯入的資源現在必須使用 HTTPS
先前使用 HTTP 匯入資源的舊版應用程式必須改為使用 HTTPS。
系統已不再預設禁止提交表單
在 NATIVE
使用沙箱機制的 HTML 表單下,系統就無法實際提交及瀏覽該頁面。因此,開發人員只需在提交按鈕中加入 onclick
處理常式,就不必擔心後續發生的情況。
使用 IFRAME
模式則可提交 HTML 表單,如果表單元素未指定 action
屬性,則會提交至空白頁面。更糟的是,在 onclick
處理常式有機會完成之前,內部 iframe 會重新導向至空白頁面。
解決方法是將 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 指南的「用戶端對伺服器通訊」一文。