תיאור
משתמשים ב-API של chrome.permissions
כדי לבקש הרשאות אופציונליות שהוצהרו בזמן הריצה ולא בזמן ההתקנה, כדי שהמשתמשים יבינו למה נדרשות ההרשאות ויעניקו רק את ההרשאות הנחוצות.
סקירה כללית
אזהרות לגבי הרשאות נועדו לתאר את היכולות שמקבלים באמצעות ממשק API, אבל יכול להיות שחלק מהאזהרות האלה לא ברורות. ממשק ה-API של ההרשאות מאפשר למפתחים להסביר את ההתראות לגבי ההרשאות ולהציג תכונות חדשות בהדרגה, כך שהמשתמשים יכולים להכיר את התוסף ללא סיכון. כך המשתמשים יכולים לציין את רמת הגישה שהם מוכנים להעניק ואילו תכונות הם רוצים להפעיל.
לדוגמה, הפונקציונליות העיקרית של תוסף ההרשאות האופציונלי משנה את דף הכרטיסייה החדשה. אחת מהתכונות היא הצגת היעד היומי של המשתמש. כדי להשתמש בתכונה הזו נדרשת רק ההרשאה storage, שלא כוללת אזהרה. לתוסף יש תכונה נוספת, שהמשתמשים יכולים להפעיל בלחיצה על הלחצן הבא:
כדי להציג את האתרים המובילים של המשתמש, צריך את ההרשאה 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" |
ה-API chrome.debugger משמש ככלי להעברה חלופית של פרוטוקול ניפוי הבאגים מרחוק של Chrome. |
"declarativeNetRequest" |
הרשאה שמעניקה לתוסף גישה לממשק ה-API chrome.declarativeNetRequest. |
"devtools" |
מאפשר לתוסף להרחיב את הפונקציונליות של Chrome DevTools. |
"experimental" |
Canary ו-Dev channel בלבד. הרשאה שמעניקה לתוסף גישה לממשקי ה-API של chrome.experimental. |
"geolocation" |
הרשאה שמאפשרת לתוסף להשתמש ב-API של מיקום גיאוגרפי ב-HTML5. |
"mdns" |
מעניק לתוסף גישה לממשק ה-API chrome.mdns. |
"proxy" |
הרשאה לתוסף לגשת ל-API של chrome.proxy כדי לנהל את הגדרות שרת ה-proxy של Chrome. |
"tts" |
ה-API chrome.tts מפעיל המרת טקסט לדיבור (TTS) סינתטית. |
"ttsEngine" |
ה-API chrome.ttsEngine מטמיע מנוע המרה של טקסט לדיבור (TTS) באמצעות תוסף. |
"wallpaper" |
ChromeOS בלבד. שינוי הטפט ב-ChromeOS באמצעות ה-API chrome.wallpaper. |
במאמר הצהרת הרשאות והצגת אזהרות למשתמשים מפורט מידע נוסף על ההרשאות הזמינות ועל האזהרות שלהן.
שלב 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.
chrome.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()
:
chrome.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()
מוסיפה אותה חזרה בלי להציג הודעה למשתמש.
chrome.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
addSiteAccessRequest()
chrome.permissions.addSiteAccessRequest(
request: object,
callback?: function,
)
הוספת בקשת גישה לאתר. הבקשה תוצג למשתמש רק אם ניתן להעניק לתוסף גישה לאתר שמופיע בבקשה. הבקשה תתאפס בעת ניווט בין מקורות שונים. אחרי האישור, הבקשה מעניקה גישה קבועה למקור המוביל של האתר
פרמטרים
-
בקשה
אובייקט
-
documentId
מחרוזת אופציונלי
המזהה של מסמך שבו אפשר להציג בקשות גישה לאתר. חייב להיות המסמך ברמת העליונה בכרטיסייה. אם הבקשה תסופק, היא תוצג בכרטיסייה של המסמך שצוין ותימחק כשהמסמך מנווט למקור חדש. הוספת בקשה חדשה תבטל כל בקשה קיימת ל-
tabId
. צריך לציין את הערך הזה או את הערךtabId
. -
קו ביטול נעילה
מחרוזת אופציונלי
תבנית ה-URL שבה ניתן להציג בקשות גישה לאתר. אם תספקו את התבנית הזו, בקשות גישה לאתרים יוצגו רק בכתובות URL שתואמות לתבנית הזו.
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שבה אפשר להציג בקשות גישה לאתר. אם הבקשה תסופק, היא תוצג בכרטיסייה שצוינה ותימחק כשהכרטיסייה מנווטת למקור חדש. הוספת בקשה חדשה תבטל בקשה קיימת ל-
documentId
. צריך לציין את הערך הזה או את הערךdocumentId
.
-
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
יש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
contains()
chrome.permissions.contains(
permissions: Permissions,
callback?: function,
)
בודקת אם לתוסף יש את ההרשאות שצוינו.
פרמטרים
-
permissions
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:(result: boolean) => void
-
תוצאה
בוליאני
הערך true אם לתוסף יש את ההרשאות שצוינו. אם מקור צוין גם כהרשאה אופציונלית וגם כדפוס התאמה של סקריפט תוכן, הפונקציה תחזיר את הערך
false
אלא אם שתי ההרשאות ניתנו.
-
החזרות
-
Promise<boolean>
גרסה 96 ואילך של Chromeיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
getAll()
chrome.permissions.getAll(
callback?: function,
)
הפונקציה מקבלת את קבוצת ההרשאות הנוכחית של התוסף.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:(permissions: Permissions) => void
-
permissions
ההרשאות הפעילות של התוסף. לתשומת ליבכם: נכס
origins
יכיל מקורות שהוענקו מאלה שצוינו במפתחותpermissions
ו-optional_permissions
במניפסט, ומאלה שמשויכים לסקריפטים של תוכן.
-
החזרות
-
Promise<Permissions>
גרסה 96 ואילך של Chromeיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
remove()
chrome.permissions.remove(
permissions: Permissions,
callback?: function,
)
הסרת הגישה להרשאות שצוינו. אם יהיו בעיות בהסרת ההרשאות, המערכת תגדיר את הערך runtime.lastError
.
פרמטרים
-
permissions
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:(removed: boolean) => void
-
הוסר
בוליאני
הערך True אם ההרשאות הוסרו.
-
החזרות
-
Promise<boolean>
גרסה 96 ואילך של Chromeיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
removeSiteAccessRequest()
chrome.permissions.removeSiteAccessRequest(
request: object,
callback?: function,
)
הסרת בקשת גישה לאתר, אם יש כזו.
פרמטרים
-
בקשה
אובייקט
-
documentId
מחרוזת אופציונלי
המזהה של המסמך שבו בקשת הגישה לאתר תוסר. חייב להיות המסמך ברמת העליונה בכרטיסייה. צריך לציין את הערך הזה או את הערך
tabId
. -
קו ביטול נעילה
מחרוזת אופציונלי
תבנית כתובת ה-URL שבה תבוטל בקשת הגישה לאתר. אם מציינים את השדה הזה, הוא חייב להתאים בדיוק לדפוס של בקשת גישה קיימת לאתר.
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שבה תבוטל בקשת הגישה לאתר. צריך לציין את הערך הזה או את הערך
documentId
.
-
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
יש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
request()
chrome.permissions.request(
permissions: Permissions,
callback?: function,
)
הבקשה מבקשת גישה להרשאות שצוינו, ומציגה הודעה למשתמש במקרה הצורך. צריך להגדיר את ההרשאות האלה בשדה optional_permissions
במניפסט, או שהן צריכות להיות הרשאות נדרשות שהמשתמש לא נתן. המערכת תתעלם מהנתיבים בתבניות המקור. אפשר לבקש קבוצות משנה של הרשאות מקור אופציונליות. לדוגמה, אם מציינים *://*\/*
בקטע optional_permissions
במניפסט, אפשר לבקש http://example.com/
. אם יהיו בעיות בבקשה להרשאות, הערך runtime.lastError
יוגדר.
פרמטרים
-
permissions
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:(granted: boolean) => void
-
GRANTED
בוליאני
הערך יהיה TRUE אם המשתמש העניק את ההרשאות שצוינו.
-
החזרות
-
Promise<boolean>
גרסה 96 ואילך של Chromeיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
אירועים
onAdded
chrome.permissions.onAdded.addListener(
callback: function,
)
האירוע הזה מופעל כשהתוסף מקבל הרשאות חדשות.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:(permissions: Permissions) => void
-
permissions
-
onRemoved
chrome.permissions.onRemoved.addListener(
callback: function,
)
האירוע מופעל כשהגישה להרשאות הוסרה מהתוסף.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:(permissions: Permissions) => void
-
permissions
-