ההרשאה "activeTab"

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

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

בלי "activeTab":

ללא ActiveTab

עם "activeTab":

עם ActiveTab

דוגמה

כדאי לעיין בתוסף לדוגמה של 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';
}

chrome.action.onClicked.addListener((tab) => {
  if (!tab.url.includes('chrome://')) {
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

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

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

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

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

מהו "activeTab" מאפשר

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

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

הפעלת ActiveTab

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