שירות 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.