אמצעי בקרה למשתמשים על הרשאות מארח: מדריך למעבר

סיכום

מה משתנה?

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

אילו ממשקי API מושפעים?

השינוי הזה ישפיע על כל ממשקי ה-API שמושפעים מהרשאות המארח שצוינו במניפסט של התוסף, וגם מסקריפטים של תוכן. ממשקי ה-API שנדרשים להם הרשאות מארח כוללים webRequest, cookie, tabs.executeScript() ו-tabs.insertCSS() וביצוע בקשות ממקורות שונים, למשל דרך XMLHTTPRequest או fetch() API.

הגבלת גישה

איך המשתמש יכול להגביל את הגישה?

המשתמשים יכולים לבחור אם לאפשר את ההפעלה של התוסף בלחיצה, בקבוצת אתרים ספציפית או בכל האתרים המבוקשים. האפשרויות האלה מוצגות למשתמשים בדף chrome://extensions וגם בתפריט ההקשר של התוסף.

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

מה קורה אם משתמש בוחר להפעיל את התוסף שלי 'בלחיצה'?

התוסף מתנהג בפועל כאילו הוא השתמש בהרשאה activeTab. התוסף מקבל גישה זמנית לכל מארח שבו המשתמש לוחץ על התוסף, אם הוא ביקש את המארח הזה (והוא לא אתר מוגבל, כמו chrome://settings). כשהוא מוגדר לפעול לאחר לחיצה, Chrome מתייג את התוסף באמצעות עיגול וצללית (ראו בהמשך) כדי לציין שמבקשת גישה לאתר מסוים.

צילום מסך של התגים ש-Chrome מוסיף לסמל התוסף בסרגל הכלים

מה קורה אם משתמש בוחר להפעיל את התוסף שלי באתרים ספציפיים?

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

מה קורה אם משתמש בוחר להפעיל את התוסף שלי בכל האתרים?

לתוסף יש גישה אוטומטית לכל אתר שהתבקש במניפסט.

התנהגויות של API

ממשק API לבקשת אינטרנט

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

סקריפטים של תוכן, Tabs.executeScript(), tab.insertCSS()

התוסף עדיין יכול להוסיף באופן אוטומטי סקריפטים וגיליונות סגנונות לכל אתר שיש לו גישה אליו. באתרים שלתוסף אין גישה אליהם, Chrome מתייג את התוסף כדי לציין שהתוסף מבקש גישה לדף. המשתמש יוכל להעניק גישה לתוסף. אם סקריפט התוכן הוגדר להזרקה ב-document_idle, הסקריפט יודבק באופן מיידי. אחרת, Chrome ינחה את המשתמש לרענן את הדף כדי לאפשר לתוסף להחדיר סקריפטים בשלב מוקדם יותר של טעינת הדף (ב-document_start או document_end). הקריאות החוזרות (callback) בשיטות tabs.executeScript() ו-tabs.insertCSS() מופעלות רק אם המשתמש מעניק גישה לאתר.

קובצי cookie ודף רקע XHR

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

הדוגמה הבאה ממחישה איך זה עשוי לעבוד עם ה-API של קובצי ה-cookie.

לפני:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

אחרי:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

העברה

מהן השיטות המומלצות כדי לא להיפגע מכך?

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

מה יקרה להגדרות של המשתמשים הנוכחיים?

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

איך אפשר לבדוק אם לתוסף שלי יש הרשאה לפעול באתר?

אפשר להשתמש ב-API permissions.contains() כדי לבדוק אם לתוסף שלכם ניתנה גישה למקור מסוים.