Apps Script เพื่อปกป้องผู้ใช้ไม่ให้ได้รับ HTML หรือ JavaScript ที่เป็นอันตราย ใช้ 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