سرویس HTML: محدودیت ها

برای محافظت از کاربران در برابر HTML یا جاوا اسکریپت مخرب، سرویس HTML از iframeها برای sandbox کردن برنامه‌های وب یا رابط‌های کاربری سفارشی برای Google Docs، Google Sheets و Forms استفاده می‌کند. سرویس HTML در موقعیت‌های دیگر، مانند تولید بدنه یک ایمیل، از sandbox استفاده نمی‌کند. sandbox محدودیت‌هایی را بر کد سمت کلاینت اعمال می‌کند.

حالت سندباکس

به استثنای IFRAME ، تمام حالت‌های sandbox غیرفعال هستند. برنامه‌هایی که قبلاً از حالت‌های 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 که به محتوا اجازه می‌دهد در بالاترین سطح خود پیمایش کند، محدود شده و به عنوان یک ویژگی در sandbox تنظیم نشده است. اگر نیاز به تغییر مسیر اسکریپت خود دارید، به جای آن یک لینک یا دکمه برای کاربر اضافه کنید تا اقدامی انجام دهد.

در حالت IFRAME باید ویژگی هدف لینک را روی _top یا _blank تنظیم کنید:

کد.js

function doGet() {
  var template = HtmlService.createTemplateFromFile('top');
  return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

بالا.html

<!DOCTYPE html>
<html>
 <body>
   <div>
     <a href="http://google.com" target="_top">Click Me!</a>
   </div>
 </body>
</html>

همچنین می‌توانید این ویژگی را با استفاده از تگ <base> در بخش head صفحه وب مربوطه، بازنویسی کنید:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <div>
     <a href="http://google.com">Click Me!</a>
   </div>
 </body>
</html>

HTTPS برای محتوای فعال مورد نیاز است

محتوای «فعال» مانند اسکریپت‌ها، استایل‌شیت‌های خارجی و درخواست‌های XmlHttp باید از طریق HTTPS بارگذاری شوند، نه HTTP.