Để bảo vệ người dùng khỏi bị phân phát HTML hoặc JavaScript độc hại, Apps Script sử dụng iframe để tạo hộp cát cho các ứng dụng web dịch vụ HTML hoặc người dùng tuỳ chỉnh các giao diện dành cho Google Tài liệu, Trang tính và Biểu mẫu. (Dịch vụ HTML không sử dụng hộp cát trong các trường hợp khác, chẳng hạn như khi tạo nội dung của email). Hộp cát đặt ra các giới hạn đối với mã phía máy khách.
Chế độ Hộp cát
Tất cả các chế độ hộp cát hiện đã ngừng hoạt động, ngoại trừ IFRAME
. Ứng dụng dùng hộp cát cũ
các chế độ hiện sẽ tự động sử dụng chế độ IFRAME
mới hơn. Nếu bạn có tập lệnh
được phát triển bằng các chế độ cũ (NATIVE
và EMULATED
), bạn nên
làm theo hướng dẫn di chuyển để đảm bảo
chúng hoạt động đúng cách ở chế độ IFRAME
.
setSandboxMode
hiện không có hiệu lực khi được gọi.
Các hạn chế ở chế độ IFRAME
Chế độ hộp cát IFRAME
dựa trên
Tính năng hộp cát iframe
trong HTML5 bằng các từ khoá sau:
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
– Thuộc tính này chỉ được đặt cho dự án tập lệnh độc lập.
Từ khoá allow-top-navigation
, cho phép nội dung điều hướng trong
ngữ cảnh duyệt web cấp cao nhất, bị hạn chế và không được đặt làm thuộc tính trong
hộp cát. Nếu bạn cần chuyển hướng tập lệnh của mình, hãy thêm một liên kết hoặc một nút cho
để người dùng thực hiện hành động.
Đặt thuộc tính đích liên kết
Ở chế độ IFRAME
, bạn cần đặt thuộc tính đích liên kết thành
_top
hoặc _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>
Bạn cũng có thể ghi đè thuộc tính này bằng cách sử dụng thẻ <base>
trong phần đầu
của trang web đính kèm:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Cần phải sử dụng HTTPS cho nội dung đang hoạt động
"Đang hoạt động" nội dung như tập lệnh, biểu định kiểu bên ngoài và XmlHttpRequests phải được tải qua HTTPS, không phải HTTP.