כדי להחליף את הפונקציונליות במעבר מדפי רקע לשירותי עבודה של תוספים, מפתחים יכולים להשתמש ב-API chrome.offscreen
ובהרשאת המניפסט החל מגרסת Chrome 109. הבקשה להרשאה הזו מאפשרת ליצור מסמכים מחוץ למסך כדי להשתמש בממשקי API של DOM בלי לפתוח חלונות או כרטיסיות חדשות באופן שמפריע לחוויית המשתמש. ממשק ה-API של chrome.offscreen
זמין עכשיו בתוספים של Chrome.
ב-Chromium, תוספים של Manifest V3 מבוססים על שירותי עובדים, אבל שירותי עובדים לא מספקים תמיכה באותם ממשקי API ומנגנונים שקיימים בדפים מלאים שמבוססים על מסמכים (כולל דפי רקע ודפי אירועים). בנוסף, שימוש בסקריפטים של תוכן כדי לגשת לממשקי DOM API בדפי אינטרנט משאיר את התוסף לחסדי מדיניות אבטחת תוכן שונה בדף לכל דף. כדי לעזור לפתור את הבעיה הזו, אנחנו משיקים מסמכים מחוץ למסך כדי לתמוך בממשקי API ובתכונות שקשורות ל-DOM. לשם כך, אנחנו מאפשרים לתוספים של Manifest V3 לפתוח מסמכים מחוץ למסך עם הרשאות מינימליות, מוגבלות להיקף יחסית ועם מעט הרשאות בזמן הריצה, באמצעות ממשק API ייעודי.
פרטי התכונה
מסמכים מחוץ למסך נועדו במיוחד לטפל בתרחישי שימוש שלא נתמכים בשירותי עובדים (למשל, הפעלת אודיו). לכן, משך החיים של הדף הזה וההרשאות שיינתנו לו הם נפרדים מאלה של שירות העובד של התוסף.
לדף יהיה מנגנון משך חיים דומה לדפי אירועים ב-Manifest V2, כך שהוא יפורק כשהוא יפסיק לבצע פעולות. בנוסף, סוכן המשתמש עשוי להחיל הגבלות נוספות על משך החיים הספציפי למטרה שצוינה.
מסמכים מחוץ למסך נועדו למלא פערים בממשקי API שרק לממשקי API של DOM יש גישה אליהם. לכן, אין צורך לחשוף ממשקי API של תוספים ישירות בהקשר הזה. כדי לצמצם את הסבירות שתוספים ישתמשו בהם כ'החלפת דף רקע', רק ממשקי ה-API לשליחת הודעות של chrome.runtime
חשופים למסמך מחוץ למסך. (מפתחים יכולים גם להשתמש בהודעות באינטרנט על ידי הצהרה על המסמך מחוץ למסך כלקוח דרך ה-service worker שלהם).
מאחר שחלק מתרחישי השימוש – במיוחד סריקה של אתרים – דורשים גישה למסגרות ממקורות שונים, אנחנו מאפשרים למסמכים האלה להטמיע מסגרות ממקורות שונים בהתאם לאותם כללים שחלים על דפי התוספים כיום. במסמכים מחוץ למסך, סקריפטים של תוכן שצוינו על ידי התוסף יכולים לפעול במסגרות האלה כדי לגרוף את התוכן הנדרש, כמו בכל דף אינטרנט רגיל.
סיבות, והדרישה לציין מטרה
כדי ליצור מסמך מחוץ למסך, צריך לציין סיבות ולספק נימוקים נוספים. הסיבות האלה מפורטות במסמכי העזרה של ה-API, והן מטפלות בטווח החיים של המסמך בדרכים שונות. לדוגמה, למסמך שנפתח להשמעת אודיו חלים כרגע כללים שונים על משך החיים שלו בהשוואה למסמך שנפתח לניהול הלוח. אפשר גם להוסיף פרטים נוספים על מטרת המסמך מחוץ למסך בצד שמאל של השורה, במחרוזת שמפתחים כותבים ולא בפרמטר שיש לו השפעה על המסמך. עם הזמן, יכול להיות שנוסיף עוד סיבות ל-API ככל שהמפתחים ישתפו את המשוב והתרחישים לדוגמה שלהם.
מבט אל העתיד
כדי להקל על ההטמעה, הגרסה הראשונה של ה-API תומכת רק בדף אחד לכל תוסף, לכל פרופיל בכל פעם. בגרסאות עתידיות, יכול להיות שנאפשר תמיכה בכמה דפים. נכון לעכשיו, אם התוסף פועל במצב מפוצל עם פרופיל פרטי פעיל, בכל אחד מהפרופילים הרגילים והפרטיים יכול להיות מסמך אחד מחוץ למסך. אנחנו גם מתכננים להוסיף ל-extension worker פונקציונליות של DOM בשלב מאוחר יותר. כדי להכין את התוספים לעתיד, אפשר להתאים פונקציות שמשתמשות ב-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);
}
בנוסף, ככל שמוסיפים ל-service worker פונקציונליות של DOM וממשקי API, רשימת הסיבות ליצירת מסמך תתווסף או תופחת בהתאם למצב הנוכחי של ה-service worker, ולסיבות לשימוש במסמכים מחוץ למסך.
סיכום
מסמכים מחוץ למסך מאפשרים לתוספים לקבל גישה ל-DOM או לאינטראקציה עם חלון, שאי אפשר להשיג כרגע ב-service workers. היא גם מספקת גישה גמישה, שבה אפשר להוסיף תרחישי שימוש חדשים ולהסיר תרחישי שימוש שפותרו בעתיד. תוספים צריכים להשתמש בממשק ה-API המוצעת למסמכים מחוץ למסך לתרחישים ספציפיים של שימוש, וההקשר הראשי ברקע של התוסף צריך להישאר ה-service worker שצוין במניפסט. לא כדאי לאחסן את הלוגיקה הראשית של התוסף במסמך מחוץ למסך, כי יש לו גישה מוגבלת ל-API. משך החיים של מסמך מחוץ למסך לא תלוי ב-service worker שיצר אותו. נתייחס לתרחישים לדוגמה ולשיקולים לגבי משך החיים של עובד שירות בתוספים בפוסט נפרד בבלוג. הסיבות לשימוש במסמכים מחוץ למסך ישתנו עם הזמן, ככל שיתווספו תכונות וממשקי API ל-service worker עצמו. נשמח לקבל משוב ממפתחים במהלך התהליך.