ההרשאה "activeTab"

ההרשאה "activeTab" נותנת לתוסף גישה זמנית לכרטיסייה הפעילה כרגע כשהמשתמש מפעיל את התוסף – לדוגמה, בלחיצה על הפעולה שלו. הגישה לכרטיסייה נמשכת כל עוד המשתמש נמצא בדף הזה, והיא מבוטלת כשהמשתמש יוצא מהדף או סוגר את הכרטיסייה. לדוגמה, אם המשתמש מפעיל את התוסף בכתובת https://example.com ואז עובר לכתובת https://example.com/foo, לתוסף תמשיך להיות גישה לדף. אם המשתמש עובר אל https://chromium.org, הגישה מבוטלת.

היא משמשת כחלופה לשימושים רבים של "<all_urls>", אבל לא מוצגת הודעת אזהרה במהלך ההתקנה:

בלי "activeTab":

בלי activeTab

עם "activeTab":

עם activeTab

אין גישה לדפים מוגבלים, כמו דפי chrome://.

דוגמה

עיינו בתוסף לדוגמה Page Redder:

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

browser.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    browser.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

למה בחרנו לעשות זאת?

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

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

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

מה ההרשאה activeTab מאפשרת

כשההרשאה "activeTab" מופעלת בכרטיסייה, התוסף יכול:

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

הפעלת activeTab

התנועות הבאות של המשתמש מפעילות את ההרשאה "activeTab":