תיאור
משתמשים ב-API של chrome.permissions כדי לבקש הרשאות אופציונליות שהוצהרו בזמן הריצה ולא בזמן ההתקנה, כדי שהמשתמשים יבינו למה ההרשאות נחוצות ויתנו רק את ההרשאות שצריך.
מושגים ושימוש
אזהרות לגבי הרשאות נועדו לתאר את היכולות שניתנות על ידי API, אבל חלק מהאזהרות האלה לא תמיד ברורות. Permissions API מאפשר למפתחים להסביר את אזהרות ההרשאות ולהציג תכונות חדשות בהדרגה, כך שהמשתמשים יכולים להכיר את התוסף ללא סיכון. כך המשתמשים יכולים לציין את רמת הגישה שהם מוכנים לתת ואת התכונות שהם רוצים להפעיל.
לדוגמה, הפונקציונליות העיקרית של התוסף עם ההרשאות האופציונליות היא לשנות את דף הכרטיסייה החדשה. אחת מהתכונות היא הצגת היעד היומי של המשתמש. התכונה הזו דורשת רק את ההרשאה אחסון, שלא כוללת אזהרה. לתוסף יש תכונה נוספת, שמשתמשים יכולים להפעיל בלחיצה על הכפתור הבא:
כדי להציג את האתרים המובילים של המשתמש, נדרשת ההרשאה topSites, שכוללת את האזהרה הבאה.
topSitesהטמעת הרשאות אופציונליות
שלב 1: מחליטים אילו הרשאות נדרשות ואילו הרשאות הן אופציונליות
תוסף יכול להצהיר על הרשאות נדרשות ועל הרשאות אופציונליות. באופן כללי, כדאי:
- השתמשו בהרשאות הנדרשות כשהן נחוצות לפונקציונליות הבסיסית של התוסף.
- השתמשו בהרשאות אופציונליות כשהן נדרשות לתכונות אופציונליות בתוסף.
יתרונות של הרשאות נדרשות:
- פחות בקשות: תוסף יכול לבקש מהמשתמש לאשר את כל ההרשאות בבת אחת.
- פיתוח פשוט יותר: ההרשאות הנדרשות מובטחות.
היתרונות של הרשאות אופציונליות:
- אבטחה משופרת: התוספים פועלים עם פחות הרשאות, כי המשתמשים מפעילים רק את ההרשאות שנדרשות.
- מידע טוב יותר למשתמשים: תוסף יכול להסביר למה הוא צריך הרשאה מסוימת כשהמשתמש מפעיל את התכונה הרלוונטית.
- שדרוגים קלים יותר: כשמשדרגים את התוסף, Chrome לא משבית אותו למשתמשים אם השדרוג מוסיף הרשאות אופציונליות ולא הרשאות נדרשות.
שלב 2: הצהרה על הרשאות אופציונליות במניפסט
מצהירים על הרשאות אופציונליות במניפסט של התוסף באמצעות המפתח optional_permissions, באותו פורמט כמו השדה permissions:
{
"name": "My extension",
...
"optional_permissions": ["tabs"],
"optional_host_permissions": ["https://www.google.com/"],
...
}
אם אתם רוצים לבקש מארחים שאתם מגלים רק בזמן הריצה, הוסיפו את "https://*/*" לשדה optional_host_permissions של התוסף. כך אפשר לציין כל מקור ב-"Permissions.origins", כל עוד יש לו סכימה תואמת.
הרשאות שאי אפשר לציין כאופציונליות
אפשר להגדיר את רוב ההרשאות של תוספים ל-Chrome כאופציונליות, למעט המקרים הבאים.
| הרשאה | תיאור |
|---|---|
"debugger" |
browser.debugger API משמש כהעברה חלופית לפרוטוקול ניפוי הבאגים מרחוק של Chrome. |
"declarativeNetRequest" |
נותנת לתוסף גישה ל-API של browser.declarativeNetRequest. |
"devtools" |
מאפשרת לתוסף להרחיב את הפונקציונליות של כלי הפיתוח ל-Chrome. |
"geolocation" |
מאפשרת לתוסף להשתמש ב-API של המיקום הגיאוגרפי ב-HTML5. |
"mdns" |
מעניקה לתוסף גישה ל-API של browser.mdns. |
"proxy" |
נותנת לתוסף גישה ל-API של browser.proxy כדי לנהל את הגדרות שרת ה-proxy של Chrome. |
"tts" |
browser.tts API משמיע המרת טקסט לדיבור (TTS) מסונתזת. |
"ttsEngine" |
ה-API browser.ttsEngine מטמיע מנוע המרת טקסט לדיבור (TTS) באמצעות תוסף. |
"wallpaper" |
ב-ChromeOS בלבד. משתמשים ב-API browser.wallpaper כדי לשנות את הטפט ב-ChromeOS. |
במאמר הצהרת הרשאות מפורט מידע נוסף על ההרשאות הזמינות והאזהרות שלהן.
שלב 3: מבקשים הרשאות אופציונליות
מבקשים את ההרשאות מתוך תנועה של המשתמש באמצעות permissions.request():
document.querySelector('#my-button').addEventListener('click', (event) => {
// Permissions must be requested from inside a user gesture, like a button's
// click handler.
browser.permissions.request({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (granted) => {
// The callback argument will be true if the user granted the permissions.
if (granted) {
doSomething();
} else {
doSomethingElse();
}
});
});
אם הוספת ההרשאות גורמת להצגת הודעות אזהרה שונות מאלה שהמשתמש כבר ראה ואישר, Chrome מציג למשתמש בקשה. לדוגמה, הקוד הקודם עשוי להוביל להנחיה כזו:
שלב 4: בודקים את ההרשאות הנוכחיות של התוסף
כדי לבדוק אם לתוסף יש הרשאה ספציפית או קבוצת הרשאות, משתמשים ב-permission.contains():
browser.permissions.contains({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (result) => {
if (result) {
// The extension has the permissions.
} else {
// The extension doesn't have the permissions.
}
});
שלב 5: מסירים את ההרשאות
מומלץ להסיר הרשאות כשכבר לא צריך אותן. אחרי שהרשאה הוסרה, קריאה ל-permissions.request() בדרך כלל מוסיפה את ההרשאה בחזרה בלי להציג בקשה למשתמש.
browser.permissions.remove({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (removed) => {
if (removed) {
// The permissions have been removed.
} else {
// The permissions have not been removed (e.g., you tried to remove
// required permissions).
}
});
סוגים
Permissions
מאפיינים
-
מקורות
string[] אופציונלי
רשימת ההרשאות למארחים, כולל אלה שצוינו במפתחות
optional_permissionsאוpermissionsבמניפסט, ואלה שמשויכות לסקריפטים של תוכן. -
permissions
string[] אופציונלי
רשימה של הרשאות עם שם (לא כולל מארחים או מקורות).
Methods
addHostAccessRequest()
browser.permissions.addHostAccessRequest(
request: object,
): Promise<void>
מוסיפה בקשת גישה למארח. הבקשה תועבר למשתמש רק אם אפשר לתת לתוסף גישה למארח בבקשה. הבקשה תאופס בניווט ממקורות שונים. אם הבקשה תאושר, האתר יקבל גישה קבועה למקור הראשי של האתר
פרמטרים
-
בקשה
אובייקט
-
documentId
מחרוזת אופציונלי
המזהה של מסמך שבו אפשר להציג בקשות גישה למארח. הוא חייב להיות המסמך ברמה העליונה בכרטיסייה. אם צוין, הבקשה מוצגת בכרטיסייה של המסמך שצוין ומוסרת כשהמסמך מנווט למקור חדש. הוספת בקשה חדשה תבטל כל בקשה קיימת לגבי
tabId. צריך לציין את השדה הזה או אתtabId. -
קו ביטול נעילה
מחרוזת אופציונלי
תבנית ה-URL שבה אפשר להציג בקשות גישה למארח. אם מציינים את המאפיין הזה, בקשות גישה למארח יוצגו רק בכתובות URL שתואמות לתבנית הזו.
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שבה אפשר להציג בקשות גישה למארח. אם צוינה כרטיסייה, הבקשה מוצגת בכרטיסייה שצוינה ומוסרת כשהכרטיסייה מנווטת למקור חדש. הוספת בקשה חדשה תבטל בקשה קיימת עבור
documentId. צריך לציין את השדה הזה או אתdocumentId.
-
החזרות
-
Promise<void>
contains()
browser.permissions.contains(
permissions: Permissions,
): Promise<boolean>
בודק אם לתוסף יש את ההרשאות שצוינו.
פרמטרים
-
permissions
החזרות
-
Promise<boolean>
Chrome 96 ואילך browser.* מגרסה 148 של Chrome
getAll()
browser.permissions.getAll(): Promise<Permissions>
מקבלת את קבוצת ההרשאות הנוכחית של התוסף.
החזרות
-
Promise<Permissions>
Chrome 96 ואילך browser.* מגרסה 148 של Chrome
remove()
browser.permissions.remove(
permissions: Permissions,
): Promise<boolean>
הסרת הגישה להרשאות שצוינו. אם יש בעיות בהסרת ההרשאות, ההבטחה תידחה.
פרמטרים
-
permissions
החזרות
-
Promise<boolean>
Chrome 96 ואילך browser.* מגרסה 148 של Chrome
removeHostAccessRequest()
browser.permissions.removeHostAccessRequest(
request: object,
): Promise<void>
הסרת בקשת גישה של מארח, אם קיימת.
פרמטרים
-
בקשה
אובייקט
-
documentId
מחרוזת אופציונלי
המזהה של מסמך שבו תוסר בקשת הגישה למארח. הוא חייב להיות המסמך ברמה העליונה בכרטיסייה. צריך לציין את השדה הזה או את
tabId. -
קו ביטול נעילה
מחרוזת אופציונלי
תבנית ה-URL שממנה תוסר בקשת הגישה למארח. אם מציינים את הערך הזה, הוא חייב להתאים בדיוק לתבנית של בקשת גישה קיימת למארח.
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שבה תוסר בקשת הגישה למארח. צריך לציין את השדה הזה או את
documentId.
-
החזרות
-
Promise<void>
request()
browser.permissions.request(
permissions: Permissions,
): Promise<boolean>
מבקשת גישה להרשאות שצוינו, ומציגה למשתמש בקשה אם צריך. ההרשאות האלה צריכות להיות מוגדרות בשדה optional_permissions של המניפסט, או להיות הרשאות נדרשות שהמשתמש לא העניק. המערכת תתעלם מנתיבים בתבניות המקור. אפשר לבקש קבוצות משנה של הרשאות מקור אופציונליות. לדוגמה, אם מציינים את *://*\/* בקטע optional_permissions של המניפסט, אפשר לבקש את http://example.com/. אם יש בעיות בבקשת ההרשאות, ה-promise יידחה.
פרמטרים
-
permissions
החזרות
-
Promise<boolean>
Chrome 96 ואילך browser.* מגרסה 148 של Chrome
אירועים
onAdded
browser.permissions.onAdded.addListener(
callback: function,
)
מופעל כשהתוסף מקבל הרשאות חדשות.
פרמטרים
-
callback
פונקציה
הפרמטר
callbackנראה כך:(permissions: Permissions) => void
-
permissions
-
onRemoved
browser.permissions.onRemoved.addListener(
callback: function,
)
מופעל כשגישה להרשאות הוסרה מהתוסף.
פרמטרים
-
callback
פונקציה
הפרמטר
callbackנראה כך:(permissions: Permissions) => void
-
permissions
-