Apps Script sử dụng một hộp cát bảo mật
để cung cấp cách ly bảo vệ cho Google Workspace
ứng dụng trong một số trường hợp nhất định. Tất 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.
Các ứng dụng trước đây đã sử dụng các chế độ cũ hơn này với Dịch vụ HTML có thể cần phải
thực hiện thay đổi cho chế độ IFRAME
để giải quyết những khác biệt sau:
- Bây giờ, bạn phải ghi đè thuộc tính
target
của đường liên kết bằng cách sử dụngtarget="_top"
hoặctarget="_blank"
- Tệp HTML do Dịch vụ HTML phân phát phải bao gồm <!DOCTYPE html>, <html> và <body> thẻ
- Thư viện trình tải gốc của Google
api.js
không tự động tải trong Chế độIFRAME
- Người dùng Bộ chọn cần gọi
setOrigin()
vì nội dung được phân phát từ một miền mới - Một số trình duyệt cũ hơn, bao gồm cả IE9, không được hỗ trợ
- Các tài nguyên đã nhập giờ đây phải sử dụng HTTPS
- Theo mặc định, tính năng gửi biểu mẫu không còn bị chặn
Những khác biệt này được nêu chi tiết trong các phần sau.
Đặ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();
}
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> thẻ 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>
Thẻ HTML cấp cao nhất
Trong chế độ hộp cát NATIVE
(và EMULATED
), một số thẻ HTML nhất định sẽ
tự động được thêm vào tệp .html Apps Script, nhưng điều này không xảy ra khi
bằng chế độ IFRAME
.
Để đảm bảo các trang dự án của bạn được phân phát chính xác bằng IFRAME
, hãy gói
nội dung trang trong các thẻ cấp cao nhất sau đây:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
Thư viện trình tải JavaScript gốc phải được tải một cách rõ ràng
Những tập lệnh sử dụng tính năng tự động tải thư viện trình tải gốc api.js
phải thay đổi để tải thư viện này một cách rõ ràng, như trong ví dụ sau:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Thay đổi API Bộ chọn của Google
Giờ đây, khi sử dụng API Bộ chọn của Google, bạn phải gọi setOrigin()
khi tạo
InspectorBuilder và truyền vào gốc google.script.host.origin
như dưới đây
trong ví dụ sau:
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);
}
Để xem ví dụ đầy đủ về cách hoạt động, hãy xem Hộp thoại mở tệp.
Hỗ trợ trình duyệt
Chế độ hộp cát IFRAME
dựa trên
hộp cát iframe
trong HTML5.
Tính năng này không được hỗ trợ trong một số trình duyệt cũ hơn, chẳng hạn như Internet Explorer 9. Chiến dịch này
có thể là vấn đề nếu dự án Apps Script của bạn cả:
- sử dụng
HtmlService
và - hộp cát
EMULATED
hoặcNATIVE
từng sử dụng
Khi di chuyển các ứng dụng này sang chế độ hộp cát IFRAME
, các ứng dụng này có thể không hoạt động được nữa
một số trình duyệt cũ hơn (đặc biệt là IE9 trở xuống) không hỗ trợ iframe của HTML5
hộp cát.
Những ứng dụng đã yêu cầu chế độ IFRAME
hoặc không sử dụng HtmlService
thì
không bị ảnh hưởng bởi vấn đề này.
Hiện tại, bạn bắt buộc phải sử dụng HTTPS cho các tài nguyên đã nhập
Các ứng dụng trước đây đã nhập tài nguyên bằng HTTP phải được thay đổi thành thay vào đó, hãy sử dụng HTTPS.
Theo mặc định, tính năng gửi biểu mẫu không còn bị chặn
Trong NATIVE
biểu mẫu HTML hộp cát đã bị chặn thực sự gửi
và điều hướng trên trang. Do đó, nhà phát triển chỉ cần thêm onclick
trình xử lý cho nút gửi và không phải lo lắng về điều gì sẽ xảy ra sau đó.
Tuy nhiên, với chế độ IFRAME
, biểu mẫu HTML được phép gửi và nếu biểu mẫu
không có thuộc tính action
nào được chỉ định. Phần tử này sẽ gửi tới một trang trống.
Tệ hơn nữa, iframe bên trong sẽ chuyển hướng đến trang trống trước onclick
trình xử lý dữ liệu có thể kết thúc.
Giải pháp là thêm mã JavaScript vào trang của bạn để ngăn biểu mẫu đó gửi các phần tử thực sự để trình xử lý lượt nhấp có thời gian hàm:
<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>
Bạn có thể xem một ví dụ hoàn chỉnh trong hướng dẫn htmlService Giao tiếp giữa các máy khách.