Để 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 cung cấp dịch vụ HTML hoặc giao diện người dùng tuỳ chỉ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ư tạo nội dung của email.) Hộp cát áp đặt các giới hạn đối với mã phía máy khách.
Chế độ hộp cát
Tất cả chế độ hộp cát hiện đã ngừng hoạt động, ngoại trừ IFRAME
. Các ứng dụng sử dụng chế độ hộp cát cũ hiện sẽ tự động sử dụng chế độ IFRAME
mới hơn. Nếu có cá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 các tập lệnh đó hoạt động đúng cách ở chế độ IFRAME
.
Phương thức setSandboxMode
hiện không có hiệu lực khi được gọi.
Các hạn chế trong chế độ IFRAME
Chế độ hộp cát IFRAME
dựa trên tính năng hộp cát iframe trong HTML5, sử dụ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, hãy thêm một đường liên kết hoặc nút để người dùng thực hiện hành động.
Thiết lập thuộc tính mục tiêu liên kết
Ở chế độ IFRAME
, bạn cần đặt thuộc tính đích của đường 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 bao gồm:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Bắt buộc phải sử dụng giao thức HTTPS cho nội dung đang hoạt động
Nội dung"Đang hoạt động" như tập lệnh, tệp định kiểu bên ngoài và XmlHttpRequest phải được tải qua HTTPS, chứ không phải HTTP.