Untuk melindungi pengguna agar tidak melihat HTML atau JavaScript berbahaya, Apps Script menggunakan iframe untuk melakukan sandbox aplikasi web layanan HTML atau pengguna kustom antarmuka untuk Google Dokumen, Spreadsheet, dan Formulir. (Layanan HTML tidak menggunakan {i>sandbox<i} di situasi lain, seperti membuat isi email.) Sandbox memberlakukan batasan pada kode {i>client-side<i}.
Mode Sandbox
Semua mode sandbox kini dihentikan kecuali untuk IFRAME
. Aplikasi yang menggunakan sandbox lama
kini menggunakan mode IFRAME
yang lebih baru secara otomatis. Jika Anda memiliki skrip yang
dikembangkan menggunakan mode lama (NATIVE
dan EMULATED
), Anda harus
ikuti petunjuk migrasi untuk memastikan
mereka berfungsi dengan baik
dalam mode IFRAME
.
setSandboxMode
sekarang tidak berpengaruh saat dipanggil.
Pembatasan dalam mode IFRAME
Mode sandbox IFRAME
didasarkan pada
Fitur sandboxing iframe
di HTML5, menggunakan kata kunci berikut:
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
- Atribut ini hanya ditetapkan untuk project skrip mandiri.
Kata kunci allow-top-navigation
, yang memungkinkan konten menjelajahi
konteks penjelajahan tingkat atas, dibatasi dan tidak ditetapkan sebagai atribut dalam
sandbox. Jika Anda perlu mengalihkan skrip, tambahkan link atau tombol untuk
pengguna untuk mengambil tindakan
sebagai gantinya.
Menetapkan atribut target link
Dalam mode IFRAME
, Anda perlu menetapkan atribut target link ke
_top
atau _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>
Anda juga dapat mengganti atribut ini menggunakan tag <base>
dalam bagian head
laman web yang terlampir:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
HTTPS diperlukan untuk konten aktif
"Aktif" konten seperti skrip, stylesheet eksternal, dan XmlHttpRequests harus dimuat HTTPS, bukan HTTP.