เพื่อป้องกันไม่ให้ผู้ใช้ได้รับ 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 สำหรับเนื้อหาที่ใช้งานอยู่
เนื้อหา"ทำงานอยู่" เช่น สคริปต์ สไตล์ชีตภายนอก และ XmlHttpRequest ต้องโหลดผ่าน HTTPS ไม่ใช่ HTTP