אפליקציות אינטרנט

אם בונים ממשק משתמש לסקריפט, צריך לפרסם אותו כאפליקציית אינטרנט. לדוגמה, סקריפט שמאפשר למשתמשים לקבוע פגישות עם חברי צוות התמיכה הכי טוב להציג כאפליקציית אינטרנט, כדי שהמשתמשים יוכלו לגשת אליו ישירות מהדפדפנים שלהם.

אפשר להפוך גם סקריפטים עצמאיים וגם סקריפטים שמקושרים לאפליקציות של Google Workspace לאפליקציות אינטרנט, כל עוד הם עומדים בדרישות הבאות.

דרישות לגבי אפליקציות אינטרנט

אפשר לפרסם סקריפט כאפליקציית אינטרנט אם הוא עומד בדרישות הבאות:

פרמטרים של בקשה

כשמשתמש מבקר באפליקציה או כשתוכנה שולחת לאפליקציה בקשת HTTP GET,‏ Google Apps Script מפעיל את הפונקציה doGet. כשתוכנית שולחת לאפליקציה בקשת HTTP POST, ‏ Apps Script מפעיל את doPost במקום זאת. בשני המקרים, הארגומנט e מייצג פרמטר של אירוע שיכול להכיל מידע על פרמטרים של בקשות. המבנה של אובייקט האירוע מוצג בטבלה הבאה:

שדות
e.queryString

הערך של החלק של מחרוזת השאילתה בכתובת ה-URL, או null אם לא צוינה מחרוזת שאילתה

name=alice&n=1&n=2
e.parameter

אובייקט של צמדי מפתח/ערך שמתאימים לפרמטרים של הבקשה. רק הערך הראשון מוחזר לפרמטרים שיש להם כמה ערכים.

{"name": "alice", "n": "1"}
e.parameters

אובייקט שדומה ל-e.parameter, אבל עם מערך של ערכים לכל מפתח

{"name": ["alice"], "n": ["1", "2"]}
e.pathInfo

נתיב כתובת ה-URL אחרי /exec או /dev. לדוגמה, אם נתיב כתובת ה-URL מסתיים ב-/exec/hello, פרטי הנתיב הם hello.

e.contextPath לא בשימוש, תמיד מחרוזת ריקה.
e.contentLength

אורך גוף הבקשה עבור בקשות POST, או -1 עבור בקשות GET

332
e.postData.length

בדיוק כמו e.contentLength

332
e.postData.type

סוג ה-MIME של גוף בקשת ה-POST

text/csv
e.postData.contents

הטקסט של תוכן גוף ה-POST

Alice,21
e.postData.name

הערך תמיד יהיה postData

postData

מעבירים פרמטרים כמו username ו-age לכתובת URL כמו הבאה:

https://script.google.com/.../exec?username=jsmith&age=21

מציגים את הפרמטרים כך:

function doGet(e) {
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params).setMimeType(ContentService.MimeType.JSON);
}

בדוגמה שלמעלה, הפקודה doGet מחזירה את הפלט הבא:

{
  "queryString": "username=jsmith&age=21",
  "parameter": {
    "username": "jsmith",
    "age": "21"
  },
  "contextPath": "",
  "parameters": {
    "username": [
      "jsmith"
    ],
    "age": [
      "21"
    ]
  },
  "contentLength": -1
}

שמות הפרמטרים הבאים שמורים על ידי המערכת ואין להשתמש בהם בפרמטרים של כתובות URL או בגופי POST:

  • c
  • sid

שימוש בפרמטרים האלה עלול להוביל לתגובת HTTP 405 עם הודעת השגיאה "Sorry, the file you have requested does not exist" (מצטערים, הקובץ שביקשת לא קיים). אם אפשר, כדאי לעדכן את הסקריפט כדי להשתמש בשמות פרמטרים שונים.

פריסת סקריפט כאפליקציית אינטרנט

כדי לפרוס סקריפט כאפליקציית אינטרנט, פועלים לפי השלבים הבאים:

  1. בפינה השמאלית העליונה של פרויקט הסקריפט, לוחצים על פריסה > פריסה חדשה.
  2. לצד 'בחירת סוג', לוחצים על 'הפעלת סוגי פריסה' > אפליקציית אינטרנט.
  3. מזינים את המידע על אפליקציית האינטרנט בשדות בקטע 'הגדרות פריסה'.
  4. לוחצים על פריסה.

משתפים את כתובת ה-URL של אפליקציית האינטרנט עם מי שרוצים להשתמש באפליקציה, בתנאי שהענקתם להם גישה.

אפליקציות אינטרנט שמוצבות בדומיין אחד מפסיקות לפעול אם הבעלות עליהן משתנה לאחסון שיתופי או לחשבון בדומיין אחר. כדי לתקן את זה, הבעלים החדש או משתף הפעולה צריכים לפרוס מחדש את אפליקציית האינטרנט בדומיין החדש. לחלופין, אם אפליקציית האינטרנט מועברת בחזרה לדומיין המקורי שלה, היא מתחילה לפעול שוב בדומיין הזה בלי לפרוס אותה מחדש.

בדיקת פריסה של אפליקציית אינטרנט

כדי לבדוק את הסקריפט כאפליקציית אינטרנט, מבצעים את השלבים הבאים:

  1. בפינה השמאלית העליונה של פרויקט הסקריפט, לוחצים על פריסה > בדיקת פריסות.
  2. לצד 'בחירת סוג', לוחצים על 'הפעלת סוגי פריסה' > אפליקציית אינטרנט.
  3. מתחת לכתובת ה-URL של אפליקציית האינטרנט, לוחצים על העתקה.
  4. מדביקים את כתובת ה-URL בדפדפן ובודקים את אפליקציית האינטרנט.

    כתובת ה-URL הזו מסתיימת ב-/dev ורק משתמשים עם גישת עריכה בסקריפט יכולים לגשת אליה. המופע הזה של האפליקציה תמיד מריץ את הקוד שנשמר לאחרונה, והוא מיועד לבדיקה במהלך הפיתוח בלבד.

כדי לבדוק את התכונה הרשאות OAuth גרנולריות באפליקציית האינטרנט, צריך לוודא שאין בפרויקט הרשאות קיימות. כדי לבטל הרשאות קיימות, משתמשים ב-ScriptApp.invalidateAuth. אם יש לכם אפליקציות אינטרנט שכבר פרוסות ופועלות בזהות של המשתמש הפעיל, צריך לשנות את השדה executeAs של ה-JSON במניפסט ל-USER_DEPLOYING.

כשפורסים אפליקציות אינטרנט להפעלה כמפתח, צריך לנקוט משנה זהירות כשמטפלים בטוקנים של OAuth שהתקבלו דרך ScriptApp.getOAuthToken. הטוקנים האלה יכולים להעניק לאפליקציות אחרות גישה לנתונים שלכם – אסור להעביר אותם ללקוח.

הרשאות

ההרשאות לאפליקציית אינטרנט משתנות בהתאם לאופן שבו בוחרים להפעיל את האפליקציה:

  • הפעלת האפליקציה בתור אני – במקרה הזה, הסקריפט תמיד מופעל בתורכם, הבעלים של הסקריפט, לא משנה מי ניגש לאפליקציית האינטרנט.
  • הפעלת האפליקציה בתור המשתמש שניגש לאפליקציית האינטרנט – במקרה הזה, הסקריפט פועל תחת הזהות של המשתמש הפעיל שמשתמש באפליקציית האינטרנט. הגישה הזו להרשאות גורמת לאפליקציית האינטרנט להציג את כתובת האימייל של בעל הסקריפט כשהמשתמש מאשר את הגישה.

כדי למנוע שימוש לרעה, ב-Apps Script יש מגבלות על הקצב שבו משתמשים חדשים יכולים לאשר אפליקציית אינטרנט שפועלת כמשתמש. המגבלות האלה תלויות, בין היתר, בשאלה אם החשבון שמפרסם הוא חלק מדומיין של Google Workspace.

עבודה משותפת באפליקציות אינטרנט באמצעות אחסון שיתופי. כשפורסים אפליקציית אינטרנט באחסון שיתופי, בחירה באפשרות 'הפעלה כמשתמש' גורמת להפעלה של אפליקציית האינטרנט תחת הסמכות של המשתמש שפרס אותה (כי אין בעלים של הסקריפט).

הטמעת אפליקציית אינטרנט ב-Google Sites {:#embed-web-app}

אפליקציות אינטרנט מוטמעות עדיין כפופות להרשאות גישה כדי למנוע שימוש זדוני. אם נראה שאפליקציית האינטרנט המוטמעת לא פועלת, צריך לבדוק אם ההרשאות שהוגדרו על ידי הבעלים של אפליקציית האינטרנט והאדמין של הדומיין מאפשרות את השימוש בה.

כדי להטמיע אפליקציית אינטרנט ב-Sites, צריך קודם לפרוס אותה. תצטרכו גם את כתובת ה-URL בפריסה מתיבת הדו-שיח פריסה.

כדי להטמיע אפליקציית אינטרנט בדף Sites, פועלים לפי השלבים הבאים:

  1. פותחים את הדף ב-Sites שבו רוצים להוסיף את אפליקציית האינטרנט.
  2. בוחרים באפשרות הוספה > הטמעת כתובת URL.
  3. מדביקים את כתובת ה-URL של אפליקציית האינטרנט ולוחצים על הוספה.

אפליקציית האינטרנט מופיעה במסגרת בתצוגה המקדימה של הדף. כשמפרסמים את הדף, יכול להיות שהצופים באתר יצטרכו לאשר את אפליקציית האינטרנט לפני שהיא תפעל כרגיל. אפליקציות אינטרנט לא מורשות מציגות למשתמש בקשות לאישור.

אפליקציות אינטרנט והיסטוריית הדפדפן

כדי לדמות אפליקציה מרובת דפים או אפליקציה עם ממשק משתמש דינמי שמבוקר באמצעות פרמטרים של כתובות URL, צריך להגדיר אובייקט מצב שייצג את ממשק המשתמש או הדף של האפליקציה, ולדחוף את המצב להיסטוריית הדפדפן בזמן שהמשתמש מנווט באפליקציה. צריך להאזין לאירועי היסטוריה כדי שאפליקציית האינטרנט תציג את ממשק המשתמש הנכון כשהמשתמש מנווט קדימה ואחורה באמצעות הלחצנים של הדפדפן. על ידי שליחת שאילתה לפרמטרים של כתובת ה-URL בזמן הטעינה, האפליקציה יכולה ליצור באופן דינמי את ממשק המשתמש שלה על סמך הפרמטרים האלה, וכך לאפשר למשתמש להפעיל את האפליקציה במצב מסוים.

‫Apps Script מספקת שני ממשקי JavaScript API אסינכרוניים בצד הלקוח כדי לעזור ביצירת אפליקציות אינטרנט שמקושרות להיסטוריית הדפדפן:

  • google.script.history מספק שיטות שמאפשרות תגובה דינמית לשינויים בהיסטוריית הדפדפן. זה כולל: דחיפת מצבים (אובייקטים פשוטים שאתם מגדירים) להיסטוריית הדפדפן, החלפת המצב העליון במחסנית ההיסטוריה והגדרת פונקציית קריאה חוזרת של מאזין כדי להגיב לשינויים בהיסטוריה.

  • google.script.url מספק את האמצעים לאחזור פרמטרים של כתובת ה-URL ופרגמנט URL של הדף הנוכחי, אם הם קיימים.

ממשקי ה-API של ההיסטוריה האלה זמינים רק לאפליקציות אינטרנט. הן לא נתמכות בסרגלי צד, בתיבות דו-שיח או בתוספים. בנוסף, לא מומלץ להשתמש בפונקציונליות הזו באפליקציות אינטרנט שמוטמעות ב-Sites.