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

סיכום

מה משתנה?

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

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

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

הגבלת גישה

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

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

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

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

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

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

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

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

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

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

התנהגויות API

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

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

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

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

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

לתוסף עדיין יש אפשרות לקרוא ולשנות קובצי Cookie שמתקבלים מהם ולבצע XHR ממקורות שונים באתרים שבהם הוא ל- יש גישה אל. כי אין כרטיסייה שמשויכת לדף תוסף שניגש אל מקור אחר קובצי Cookie או XHRing למארח אחר, Chrome לא מתייג את התוסף כדי לציין למשתמש התוסף מבקש גישה לאתר. בניסיון לגשת לקובץ cookie של אתר אחר או ליצור קובץ 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() כדי לבדוק אם התוסף שקיבלו גישה למקור נתון.