為了保護使用者不受惡意 HTML 或 JavaScript 的侵擾,Apps Script 使用 iframe 來沙箱 HTML 服務網頁應用程式或自訂使用者 Google 文件、試算表和表單的介面。(HTML 服務不使用 其他情況下的沙箱,例如產生電子郵件內文)。沙箱 對用戶端程式碼施加限制。
沙箱模式
所有沙箱模式現在均停用,除了 IFRAME
以外。使用舊版沙箱的應用程式
模式現在會自動使用新的 IFRAME
模式。如果有指令碼
是用舊版模式 (NATIVE
和 EMULATED
) 開發而成,因此您應該
請按照遷移操作說明操作,確保
它們可在 IFRAME
模式下正常運作
setSandboxMode
此方法現已沒有任何作用。
IFrame 模式的限制
IFRAME
沙箱模式的基礎是
iframe 沙箱機制功能
,並在 HTML5 中使用以下關鍵字:
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
「有效」內容 例如指令碼、外部樣式表和 XmlHttpRequests HTTPS 而非 HTTP