שירות HTML: הגבלות

כדי להגן על המשתמשים מפני הצגת HTML או JavaScript זדוניים, ב-Apps Script נעשה שימוש ב-iframe כדי להפעיל ארגז חול לאפליקציות אינטרנט של שירות HTML או לממשקי משתמש מותאמים אישית ל-Google Docs,‏ Sheets ו-Forms. (שירות ה-HTML לא משתמש בארגז חול במצבים אחרים, כמו יצירת גוף האימייל). ארגז החול מגביל את הקוד בצד הלקוח.

מצב ארגז חול

כל מצבי ארגז החול הוצאו משימוש, מלבד IFRAME. אפליקציות שמשתמשות במצבי ארגז חול ישנים יותר משתמשות עכשיו אוטומטית במצב IFRAME החדש יותר. אם יש לכם סקריפטים שפותחו באמצעות המצבים הישנים יותר (NATIVE ו-EMULATED), אתם צריכים לפעול לפי הוראות ההעברה כדי לוודא שהם פועלים בצורה תקינה במצב IFRAME.

לשיטה setSandboxMode אין יותר השפעה כשמבצעים קריאה שלה.

הגבלות במצב IFRAME

מצב ארגז החול IFRAME מבוסס על התכונה iframe sandboxing ב-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 לתוכן פעיל

תוכן פעיל כמו סקריפטים, גיליונות סגנונות חיצוניים ו-XmlHttpRequests חייבים להיטען באמצעות HTTPS ולא באמצעות HTTP.