เพื่อป้องกันไม่ให้ผู้ใช้ได้รับ HTML หรือ JavaScript ที่เป็นอันตราย Apps Script ใช้ iframe เพื่อทำแซนด์บ็อกซ์กับเว็บแอปที่ใช้บริการ HTML หรืออินเทอร์เฟซผู้ใช้ที่กำหนดเองสำหรับ Google เอกสาร, ชีต และฟอร์ม (บริการ HTML จะไม่ใช้แซนด์บ็อกซ์ในสถานการณ์อื่นๆ เช่น การสร้างเนื้อหาของอีเมล) แซนด์บ็อกซ์จะทำให้มีข้อจำกัดในโค้ดฝั่งไคลเอ็นต์
โหมดแซนด์บ็อกซ์
ตอนนี้โหมดแซนด์บ็อกซ์ทั้งหมดจะปิดลงแล้ว ยกเว้น IFRAME
ตอนนี้แอปที่ใช้โหมดแซนด์บ็อกซ์เวอร์ชันเก่าจะใช้โหมด IFRAME
เวอร์ชันใหม่โดยอัตโนมัติ หากคุณมีสคริปต์ที่พัฒนาโดยใช้โหมดเก่า (NATIVE
และ EMULATED
) คุณควรทำตามวิธีการย้ายข้อมูลเพื่อให้แน่ใจว่าสคริปต์ทำงานได้อย่างถูกต้องในโหมด IFRAME
ตอนนี้เมธอด setSandboxMode
จะไม่มีผลเมื่อเรียกใช้
ข้อจำกัดในโหมด IFRAME
โหมดแซนด์บ็อกซ์ IFRAME
จะอิงตามฟีเจอร์แซนด์บ็อกซ์ของ iframe ใน HTML5 โดยใช้คีย์เวิร์ดต่อไปนี้
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
- แอตทริบิวต์นี้กำหนดไว้สำหรับโปรเจ็กต์สคริปต์แบบสแตนด์อโลนเท่านั้น
คีย์เวิร์ด allow-top-navigation
ซึ่งช่วยให้เนื้อหาไปยังบริบทการท่องเว็บระดับบนสุดได้ถูกจำกัดและไม่ตั้งเป็นแอตทริบิวต์ในแซนด์บ็อกซ์ หากต้องการเปลี่ยนเส้นทางสคริปต์ ให้เพิ่มลิงก์หรือปุ่มเพื่อให้ผู้ใช้ดำเนินการแทน
การตั้งค่าแอตทริบิวต์เป้าหมายลิงก์
ในโหมด IFRAME
คุณต้องตั้งค่าแอตทริบิวต์เป้าหมายลิงก์เป็น _top
หรือ _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>
คุณยังลบล้างแอตทริบิวต์นี้โดยใช้แท็ก <base>
ภายในส่วนหัวของหน้าเว็บที่ล้อมรอบอยู่ได้ด้วย โดยทำดังนี้
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
ต้องใช้ HTTPS สำหรับเนื้อหาที่ใช้งานอยู่
เนื้อหาที่"ใช้งานอยู่" เช่น สคริปต์ สไตล์ชีตภายนอก และ XmlHttpRequests ต้องโหลดผ่าน HTTPS ไม่ใช่ HTTP