บริการ HTML: ข้อจำกัด

เพื่อป้องกันไม่ให้ผู้ใช้ได้รับ HTML หรือ JavaScript ที่เป็นอันตราย Apps Script ใช้ iframe เพื่อทำแซนด์บ็อกซ์กับเว็บแอปที่ใช้บริการ HTML หรืออินเทอร์เฟซผู้ใช้ที่กำหนดเองสำหรับ Google เอกสาร, ชีต และฟอร์ม (บริการ HTML จะไม่ใช้แซนด์บ็อกซ์ในสถานการณ์อื่นๆ เช่น การสร้างเนื้อหาของอีเมล) แซนด์บ็อกซ์จะทำให้มีข้อจำกัดในโค้ดฝั่งไคลเอ็นต์

โหมดแซนด์บ็อกซ์

ตอนนี้เราเลิกใช้งานโหมดแซนด์บ็อกซ์ทั้งหมดแล้ว ยกเว้น IFRAME ตอนนี้แอปที่ใช้โหมดแซนด์บ็อกซ์เก่าจะใช้โหมด IFRAME เวอร์ชันใหม่โดยอัตโนมัติ หากคุณมีสคริปต์ที่พัฒนาโดยใช้โหมดเก่า (NATIVE และ EMULATED) คุณควรทำตามวิธีการย้ายข้อมูลเพื่อให้แน่ใจว่าสคริปต์ทำงานได้อย่างถูกต้องในโหมด IFRAME

ตอนนี้เมธอด setSandboxMode จะใช้งานไม่ได้เมื่อเรียกใช้

ข้อจํากัดในโหมด IFRAME

IFRAMEโหมดแซนด์บ็อกซ์จะอิงตามฟีเจอร์แซนด์บ็อกซ์ iframe ใน HTML5 โดยใช้คีย์เวิร์ดต่อไปนี้

คีย์เวิร์ด 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