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

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

حالت Sandbox

همه حالت‌های جعبه ایمنی به جز IFRAME اکنون غروب هستند. برنامه‌هایی که از حالت‌های جعبه ایمنی قدیمی‌تر استفاده می‌کنند، اکنون از حالت جدیدتر IFRAME به‌طور خودکار استفاده می‌کنند. اگر اسکریپت‌هایی دارید که با استفاده از حالت‌های قدیمی‌تر ( NATIVE و EMULATED ) ساخته شده‌اند، باید دستورالعمل‌های انتقال را دنبال کنید تا مطمئن شوید که در حالت IFRAME به درستی کار می‌کنند.

روش setSandboxMode اکنون هنگام فراخوانی هیچ تاثیری ندارد.

محدودیت در حالت IFRAME

حالت جعبه ایمنی IFRAME بر اساس ویژگی sandboxing 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> در قسمت 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.