Apps Script menggunakan sandbox keamanan untuk memberikan isolasi pelindung bagi Google Workspace aplikasi dalam situasi tertentu. Semua mode sandbox kini dihentikan, kecuali IFRAME
. Aplikasi yang menggunakan mode sandbox lama kini menggunakan mode IFRAME
yang lebih baru secara otomatis.
Aplikasi yang sebelumnya menggunakan mode lama ini dengan Layanan HTML mungkin perlu melakukan perubahan untuk mode IFRAME
, untuk mengatasi perbedaan berikut:
- Sekarang Anda harus mengganti atribut
target
link menggunakantarget="_top"
atautarget="_blank"
- File HTML yang ditayangkan oleh Layanan HTML harus menyertakan tag <!DOCTYPE html>, <html>, dan <body>
- Library pemuat native Google
api.js
tidak dimuat secara otomatis dalam modeIFRAME
- Pengguna Picker perlu memanggil
setOrigin()
karena konten ditayangkan dari domain baru - Beberapa browser lama, termasuk IE9, tidak didukung
- Resource yang diimpor kini harus menggunakan HTTPS
- Pengiriman formulir tidak lagi dicegah secara default
Perbedaan ini dijelaskan secara mendetail di bagian berikut.
Menetapkan atribut target link
Dalam mode IFRAME
, Anda perlu menyetel atribut target link ke _top
atau _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>
Anda juga dapat mengganti atribut ini menggunakan tag <base> dalam bagian head halaman web yang melampirkan:
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <div> <a href="http://google.com">Click Me!</a> </div> </body> </html>
Tag HTML tingkat teratas
Dalam mode sandbox NATIVE
(dan EMULATED
), tag HTML tertentu akan otomatis ditambahkan ke file .html Apps Script, tetapi hal ini tidak terjadi saat menggunakan mode IFRAME
.
Untuk memastikan halaman project Anda ditayangkan dengan benar menggunakan IFRAME
, sertakan konten halaman Anda dalam tag tingkat teratas berikut:
<!DOCTYPE html> <html> <body> <!-- Add your HTML content here --> </body> </html>
Library pemuat JavaScript Native harus dimuat secara eksplisit
Skrip yang mengandalkan pemuatan otomatis library pemuat native api.js
harus diubah untuk memuat library ini secara eksplisit, seperti dalam contoh berikut:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad"> </script>
Perubahan Google Picker API
Saat menggunakan Google Picker API, Anda kini harus memanggil setOrigin()
saat membuat PickerBuilder dan meneruskan asal google.script.host.origin
, seperti yang ditunjukkan dalam contoh berikut:
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); }
Untuk contoh kerja lengkap, lihat Dialog buka file.
Dukungan browser
Mode sandbox IFRAME
didasarkan pada fitur iframe sandboxing di HTML5. Hal ini tidak didukung di beberapa browser lama, seperti Internet Explorer 9. Hal ini dapat menjadi masalah jika project Apps Script Anda:
- menggunakan
HtmlService
, dan - sebelumnya menggunakan sandbox
EMULATED
atauNATIVE
Memigrasikan aplikasi ini ke mode sandbox IFRAME
berarti aplikasi tersebut mungkin tidak lagi berfungsi di beberapa browser lama (terutama IE9 dan yang lebih lama) yang tidak mendukung fitur sandbox iframe HTML5.
Aplikasi yang sudah meminta mode IFRAME
atau tidak menggunakan HtmlService
sama sekali tidak terpengaruh oleh masalah ini.
HTTPS kini diperlukan untuk resource yang diimpor
Aplikasi sebelumnya yang mengimpor resource menggunakan HTTP harus diubah agar menggunakan HTTPS.
Pengiriman formulir tidak lagi dicegah secara default
Di bawah sandboxing NATIVE
, formulir HTML dicegah agar tidak benar-benar mengirimkan dan membuka halaman. Dengan demikian, developer cukup menambahkan handler onclick
ke tombol kirim dan tidak perlu mengkhawatirkan apa yang terjadi setelahnya.
Namun, dengan mode IFRAME
, formulir HTML diizinkan untuk dikirimkan, dan jika elemen formulir tidak memiliki atribut action
yang ditentukan, formulir tersebut akan dikirimkan ke halaman kosong. Lebih buruk lagi, iframe dalam akan dialihkan ke halaman kosong sebelum pengendali onclick
memiliki kesempatan untuk selesai.
Solusinya adalah menambahkan kode JavaScript ke halaman Anda yang mencegah elemen formulir benar-benar dikirimkan, sehingga handler klik memiliki waktu untuk berfungsi:
<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>
Contoh lengkap dapat ditemukan di panduan HtmlService Client-to-Server Communication.