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
,且 - 先前使用
EMULATED
或NATIVE
沙箱
將這些應用程式遷移至 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 指南 用戶端對伺服器通訊。