מסמכים שלא מופיעים במסך במניפסט מגרסה V3

Ian Stanion
Ian Stanion

כדי להחליף פונקציונליות במעבר מדפי רקע ל-Service Workers של תוספים, מפתחים יכולים להשתמש ב-API של chrome.offscreen ובהרשאות המניפסט החל מגרסה 109 של Chrome. בקשת ההרשאה הזו מאפשרת ליצור מסמכים שאינם במסך כדי להשתמש ב-DOM APIs בלי לפתוח באופן פולשני חלונות חדשים או כרטיסיות חדשות שמפריעים לחוויית המשתמש. ה-API של chrome.offscreen זמין עכשיו בתוספים ל-Chrome.

ב-Chromium, תוספי Manifest V3 מבוססים על קובצי שירות (service worker), אבל קובצי שירות (service worker) לא מספקים תמיכה לאותם ממשקי API ומנגנונים כמו של דפים מלאים מבוססי-מסמכים (כולל דפי רקע ודפי אירועים). בנוסף, שימוש בסקריפטים של תוכן כדי לגשת אל ממשקי API של DOM בדפי אינטרנט משאיר את התוסף בהתאם למדיניות אבטחת תוכן שונה על בסיס דף-דף. כדי לעזור בפתרון הבעיה, אנחנו משיקים מסמכים מחוץ למסך כדי לתמוך בתכונות ובממשקי API שקשורים ל-DOM. במסגרת העדכון, אנחנו מאפשרים לתוספי Manifest V3 לפתוח בזמן הריצה מסמכים מינימליים, בהיקף מינימלי וללא הרשאה יחסית, ללא הרשאה, באמצעות API ייעודי.

מידע על התכונה

מכיוון שמסמכים מחוץ למסך מתוכננים באופן ספציפי לטפל בתרחישים לדוגמה שאינם נתמכים ב-Service Worker (לדוגמה, הפעלת אודיו), משך החיים של הדף הזה וההרשאות שהוא יוענק לו נפרדים מאלה של ה-Service Worker של התוסף. לדף יהיה מנגנון למשך החיים שדומה לדפי אירועים במניפסט מגרסה 2. הוא יושבת לאחר שיפסיק לבצע פעולות. בנוסף, סוכן המשתמש עשוי להחיל הגבלות נוספות על משך החיים הספציפי למטרה שצוינה. מסמכים שאינם במסך נועדו למלא פערים מממשקי API הנגישים רק לממשקי API של DOM. לכן, אין צורך לחשוף ממשקי API של תוספים ישירות בהקשר הזה. כדי לצמצם את הסבירות לכך שהתוספים ישמשו כ'החלפת דף רקע', רק chrome.runtime ממשקי ה-API להעברת הודעות נחשפים למסמך שנמצא מחוץ למסך. (מפתחים יכולים להשתמש בהעברת הודעות באינטרנט גם על ידי תביעת בעלות על המסמך שלא מוצג במסך כלקוח באמצעות קובץ השירות (service worker). מכיוון שתרחישי שימוש מסוימים - במיוחד, גירוד אתרים - מחייבים גישה למסגרות ממקורות צולבים, אנו מתירים למסמכים האלה להטמיע מסגרות ממקורות שונים בהתאם לאותם הכללים שחלים כיום על דפי תוספים. במסמכים שאינם במסך, סקריפטים של תוכן שצוינו על ידי התוסף יכולים לפעול במסגרות האלה כדי לסרוק תוכן נחוץ, כמו בכל דף אינטרנט רגיל.

סיבות ודרישת מטרה

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

מבט אל העתיד

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

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

בנוסף, ככל שפונקציונליות ה-DOM וממשקי ה-API יתווספו ל-Service Worker, רשימת הסיבות ליצירת מסמך תתווסף או תקטן בהתאם למצב הנוכחי של ה-Service Worker ולסיבות לשימוש במסמכים שאינם מופיעים במסך.

סיכום

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

תמונה מאת Kari Shea ב-UnFlood