תיאור
אפשר להשתמש ב-chrome.action
API כדי לשלוט בסמל התוסף בסרגל הכלים של Google Chrome.
זמינות
מניפסט
כדי להשתמש ב-chrome.action
API, צריך לציין "manifest_version"
של 3
ולכלול את המפתח "action"
בקובץ המניפסט.
{
"name": "Action Extension",
...
"action": {
"default_icon": { // optional
"16": "images/icon16.png", // optional
"24": "images/icon24.png", // optional
"32": "images/icon32.png" // optional
},
"default_title": "Click Me", // optional, shown in tooltip
"default_popup": "popup.html" // optional
},
...
}
המפתח "action"
(יחד עם רכיבי הצאצא שלו) הוא אופציונלי. גם אם התוסף לא נכלל, הוא עדיין מוצג בסרגל הכלים כדי לספק גישה לתפריט של התוסף. לכן, מומלץ תמיד לכלול לפחות את המפתחות "action"
ו-"default_icon"
.
מושגים ושימוש
חלקי ממשק המשתמש
סמל
הסמל הוא התמונה הראשית בסרגל הכלים של התוסף, והוא מוגדר על ידי המפתח "default_icon"
במפתח "action"
של המניפסט. הסמלים צריכים להיות ברוחב ובגובה של 16 פיקסלים עצמאיים ממכשיר (DIP).
המפתח "default_icon"
הוא מילון של גדלים ונתיבי תמונות. Chrome משתמש בסמלים האלה כדי לבחור את קנה המידה של התמונה שבה ישתמש. אם לא נמצאה התאמה מדויקת, Chrome בוחר את התמונה הכי קרובה שזמינה ומשנה את הגודל שלה כך שתתאים לתמונה, מה שעשוי להשפיע על איכות התמונה.
מכשירים עם גורמי קנה מידה פחות נפוצים כמו 1.5x או 1.2x הופכים לנפוצים יותר, ולכן מומלץ לספק כמה גדלים של סמלים. בנוסף, כך מוודאים שהתוסף ימשיך לפעול גם אם יהיו שינויים בגודל הסמלים שמוצגים. עם זאת, אם מספקים רק גודל אחד, אפשר להגדיר את המפתח "default_icon"
גם כמחרוזת עם הנתיב לסמל יחיד במקום מילון.
אפשר גם להתקשר אל action.setIcon()
כדי להגדיר את סמל התוסף באופן פרוגרמטי על ידי ציון נתיב תמונה שונה או על ידי מתן סמל שנוצר באופן דינמי באמצעות רכיב HTML canvas, או, אם ההגדרה מתבצעת מתוך service worker של תוסף, באמצעות API של offscreen canvas.
const canvas = new OffscreenCanvas(16, 16);
const context = canvas.getContext('2d');
context.clearRect(0, 0, 16, 16);
context.fillStyle = '#00FF00'; // Green
context.fillRect(0, 0, 16, 16);
const imageData = context.getImageData(0, 0, 16, 16);
chrome.action.setIcon({imageData: imageData}, () => { /* ... */ });
במקרה של תוספים ארוזים (שהותקנו מקובץ .crx), התמונות יכולות להיות ברוב הפורמטים שמנוע העיבוד של Blink יכול להציג, כולל PNG, JPEG, BMP, ICO ועוד. אין תמיכה ב-SVG. תוספים לא ארוזים חייבים להשתמש בתמונות PNG.
הסבר קצר (שם)
ההסבר הקצר או הכותרת מופיעים כשמעבירים את סמן העכבר מעל סמל התוסף בסרגל הכלים. הוא נכלל גם בטקסט הנגיש שמוקרא על ידי קוראי מסך כשהלחצן מקבל מיקוד.
הטולטיפ שמוגדר כברירת מחדל מוגדר באמצעות השדה "default_title"
של המפתח "action"
ב-manifest.json
.
אפשר גם להגדיר אותו באופן פרוגרמטי על ידי קריאה ל-action.setTitle()
.
תג
אפשר להציג 'תג' בפעולות – קטע טקסט שמוצג מעל הסמל. כך תוכלו לעדכן את הפעולה כדי להציג כמות קטנה של מידע על מצב התוסף, כמו מונה. התג כולל רכיב טקסט וצבע רקע. מכיוון שהמקום מוגבל, מומלץ להשתמש בטקסט של התג בארבעה תווים או פחות.
כדי ליצור תג, צריך להגדיר אותו באופן פרוגרמטי על ידי שליחת קריאה אל action.setBadgeBackgroundColor()
ו-action.setBadgeText()
. אין הגדרת תג ברירת מחדל במניפסט. ערכי הצבע של התג יכולים להיות מערך של ארבעה מספרים שלמים בין 0 ל-255 שמרכיבים את צבע ה-RGBA של התג, או מחרוזת עם ערך של צבע CSS.
chrome.action.setBadgeBackgroundColor(
{color: [0, 255, 0, 0]}, // Green
() => { /* ... */ },
);
chrome.action.setBadgeBackgroundColor(
{color: '#00FF00'}, // Also green
() => { /* ... */ },
);
chrome.action.setBadgeBackgroundColor(
{color: 'green'}, // Also, also green
() => { /* ... */ },
);
חלון קופץ
החלון הקופץ של פעולה מוצג כשמשתמש לוחץ על לחצן הפעולה של התוסף בסרגל הכלים. החלון הקופץ יכול להכיל כל תוכן HTML שרוצים, והגודל שלו יותאם אוטומטית לתוכן. הגודל של החלון הקופץ צריך להיות בין 25x25 ל-800x600 פיקסלים.
החלון הקופץ מוגדר בהתחלה על ידי המאפיין "default_popup"
במפתח "action"
בקובץ manifest.json
. אם המאפיין הזה קיים, הוא צריך להצביע על נתיב יחסי בתוך ספריית התוסף. אפשר גם לעדכן אותו באופן דינמי כך שיצביע על נתיב יחסי אחר באמצעות השיטה action.setPopup()
.
תרחישים לדוגמה
מצב לכל כרטיסייה
לפעולות של תוספים יכולים להיות מצבים שונים בכל כרטיסייה. כדי להגדיר ערך לכרטיסייה ספציפית, משתמשים במאפיין tabId
בשיטות ההגדרה של action
API. לדוגמה, כדי להגדיר את הטקסט של התג לכרטיסייה ספציפית, אפשר לעשות משהו כזה:
function getTabId() { /* ... */}
function getTabBadge() { /* ... */}
chrome.action.setBadgeText(
{
text: getTabBadge(tabId),
tabId: getTabId(),
},
() => { ... }
);
אם לא מציינים את המאפיין tabId
, ההגדרה נחשבת להגדרה גלובלית. הגדרות ספציפיות לכרטיסייה מקבלות עדיפות על פני הגדרות גלובליות.
מצב מופעל
כברירת מחדל, הפעולות בסרגל הכלים מופעלות (אפשר ללחוץ עליהן) בכל כרטיסייה. אפשר לשנות את ברירת המחדל הזו על ידי הגדרת המאפיין default_state
במפתח action
של קובץ המניפסט. אם default_state
מוגדר כ-"disabled"
, הפעולה מושבתת כברירת מחדל וצריך להפעיל אותה באופן פרוגרמטי כדי שיהיה אפשר ללחוץ עליה. אם default_state
מוגדר כ-"enabled"
(ברירת המחדל), הפעולה מופעלת וניתן ללחוץ עליה כברירת מחדל.
אפשר לשלוט במצב באופן פרוגרמטי באמצעות ה-methods action.enable()
ו-action.disable()
. ההגדרה הזו משפיעה רק על השליחה של החלון הקופץ (אם יש כזה) או של אירוע action.onClicked
לתוסף, ולא על הנוכחות של הפעולה בסרגל הכלים.
דוגמאות
בדוגמאות הבאות מוצגות כמה דרכים נפוצות לשימוש בפעולות בתוספים. כדי לנסות את ה-API הזה, צריך להתקין את הדוגמה של Action API ממאגר chrome-extension-samples.
הצגת חלון קופץ
בדרך כלל, תוסף מציג חלון קופץ כשהמשתמש לוחץ על הפעולה של התוסף. כדי להטמיע את התכונה הזו בתוסף שלכם, צריך להצהיר על החלון הקופץ בקובץ manifest.json
ולציין את התוכן ש-Chrome צריך להציג בחלון הקופץ.
// manifest.json
{
"name": "Action popup demo",
"version": "1.0",
"manifest_version": 3,
"action": {
"default_title": "Click to view a popup",
"default_popup": "popup.html"
}
}
<!-- popup.html -->
<!DOCTYPE html>
<html>
<head>
<style>
html {
min-height: 5em;
min-width: 10em;
background: salmon;
}
</style>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
החדרת סקריפט תוכן בלחיצה
דפוס נפוץ של תוספים הוא לחשוף את התכונה העיקרית שלהם באמצעות הפעולה של התוסף. הדוגמה הבאה מדגימה את התבנית הזו. כשהמשתמש לוחץ על הפעולה, התוסף מזריק סקריפט תוכן לדף הנוכחי. לאחר מכן, סקריפט התוכן מציג התראה כדי לוודא שהכול פעל כמצופה.
// manifest.json
{
"name": "Action script injection demo",
"version": "1.0",
"manifest_version": 3,
"action": {
"default_title": "Click to show an alert"
},
"permissions": ["activeTab", "scripting"],
"background": {
"service_worker": "background.js"
}
}
// background.js
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: {tabId: tab.id},
files: ['content.js']
});
});
// content.js
alert('Hello, world!');
הדמיית פעולות באמצעות declarativeContent
בדוגמה הזו אפשר לראות איך הלוגיקה ברקע של תוסף יכולה (א) להשבית פעולה כברירת מחדל ו-(ב) להשתמש ב-declarativeContent כדי להפעיל את הפעולה באתרים ספציפיים.
// service-worker.js
// Wrap in an onInstalled callback to avoid unnecessary work
// every time the service worker is run
chrome.runtime.onInstalled.addListener(() => {
// Page actions are disabled by default and enabled on select tabs
chrome.action.disable();
// Clear all rules to ensure only our expected rules are set
chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
// Declare a rule to enable the action on example.com pages
let exampleRule = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: {hostSuffix: '.example.com'},
})
],
actions: [new chrome.declarativeContent.ShowAction()],
};
// Finally, apply our new array of rules
let rules = [exampleRule];
chrome.declarativeContent.onPageChanged.addRules(rules);
});
});
סוגים
OpenPopupOptions
מאפיינים
-
windowId
מספר אופציונלי
המזהה של החלון שבו ייפתח החלון הקופץ של הפעולה. אם לא מציינים ערך, ברירת המחדל היא החלון הפעיל הנוכחי.
TabDetails
מאפיינים
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שרוצים לשאול לגבי המצב שלה. אם לא מצוינת כרטיסייה, מוחזר המצב שלא ספציפי לכרטיסייה.
UserSettings
אוסף ההגדרות שהמשתמש מציין לגבי הפעולה של התוסף.
מאפיינים
-
isOnToolbar
בוליאני
האם סמל הפעולה של התוסף גלוי בסרגל הכלים ברמה העליונה של חלונות הדפדפן (כלומר, האם המשתמש 'הצמיד' את התוסף).
UserSettingsChange
מאפיינים
-
isOnToolbar
boolean אופציונלי
האם סמל הפעולה של התוסף גלוי בסרגל הכלים ברמה העליונה של חלונות הדפדפן (כלומר, האם המשתמש 'הצמיד' את התוסף).
Methods
disable()
chrome.action.disable(
tabId?: number,
callback?: function,
): Promise<void>
משבית את הפעולה בכרטיסייה.
פרמטרים
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שרוצים לשנות את הפעולה שלה.
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
enable()
chrome.action.enable(
tabId?: number,
callback?: function,
): Promise<void>
ההרשאה מאפשרת לבצע פעולה בכרטיסייה. הפעולות מופעלות כברירת מחדל.
פרמטרים
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שרוצים לשנות את הפעולה שלה.
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
getBadgeBackgroundColor()
chrome.action.getBadgeBackgroundColor(
details: TabDetails,
callback?: function,
): Promise<extensionTypes.ColorArray>
מחזירה את צבע הרקע של הפעולה.
פרמטרים
-
פרטים
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(result: ColorArray) => void
-
תוצאה
-
החזרות
-
Promise<extensionTypes.ColorArray>
getBadgeText()
chrome.action.getBadgeText(
details: TabDetails,
callback?: function,
): Promise<string>
מחזירה את הטקסט של התג של הפעולה. אם לא מצוינת כרטיסייה, מוחזר טקסט התג שלא ספציפי לכרטיסייה. אם האפשרות displayActionCountAsBadgeText מופעלת, יוחזר טקסט placeholder אלא אם ההרשאה declarativeNetRequestFeedback קיימת או שסופק טקסט ספציפי לתג לכרטיסייה.
פרמטרים
-
פרטים
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(result: string) => void
-
תוצאה
מחרוזת
-
החזרות
-
Promise<string>
getBadgeTextColor()
chrome.action.getBadgeTextColor(
details: TabDetails,
callback?: function,
): Promise<extensionTypes.ColorArray>
מחזירה את צבע הטקסט של הפעולה.
פרמטרים
-
פרטים
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(result: ColorArray) => void
-
תוצאה
-
החזרות
-
Promise<extensionTypes.ColorArray>
getPopup()
chrome.action.getPopup(
details: TabDetails,
callback?: function,
): Promise<string>
מחזירה את מסמך ה-HTML שהוגדר כחלון הקופץ לפעולה הזו.
פרמטרים
-
פרטים
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(result: string) => void
-
תוצאה
מחרוזת
-
החזרות
-
Promise<string>
getTitle()
chrome.action.getTitle(
details: TabDetails,
callback?: function,
): Promise<string>
מחזירה את השם של הפעולה.
פרמטרים
-
פרטים
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(result: string) => void
-
תוצאה
מחרוזת
-
החזרות
-
Promise<string>
getUserSettings()
chrome.action.getUserSettings(
callback?: function,
): Promise<UserSettings>
מחזירה את ההגדרות שצוינו על ידי המשתמש שקשורות לפעולה של תוסף.
פרמטרים
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(userSettings: UserSettings) => void
-
userSettings
-
החזרות
-
Promise<UserSettings>
isEnabled()
chrome.action.isEnabled(
tabId?: number,
callback?: function,
): Promise<boolean>
התנאי מציין אם פעולת התוסף מופעלת בכרטיסייה (או באופן גלובלי אם לא צוין tabId
). פעולות שמופעלות באמצעות declarativeContent
בלבד תמיד מחזירות ערך שקר.
פרמטרים
-
tabId
מספר אופציונלי
המזהה של הכרטיסייה שרוצים לבדוק את הסטטוס שלה.
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(isEnabled: boolean) => void
-
isEnabled
בוליאני
הערך יהיה True אם הפעולה של התוסף מופעלת.
-
החזרות
-
Promise<boolean>
openPopup()
chrome.action.openPopup(
options?: OpenPopupOptions,
callback?: function,
): Promise<void>
פתיחת החלון הקופץ של התוסף. בין גרסה 118 לגרסה 126 של Chrome, האפשרות הזו זמינה רק לתוספים שהותקנו באמצעות מדיניות.
פרמטרים
-
options
OpenPopupOptions אופציונלי
מציינים את האפשרויות לפתיחת החלון הקופץ.
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
setBadgeBackgroundColor()
chrome.action.setBadgeBackgroundColor(
details: object,
callback?: function,
): Promise<void>
הגדרת צבע הרקע של התג.
פרמטרים
-
פרטים
אובייקט
-
צבע
מחרוזת | ColorArray
מערך של ארבעה מספרים שלמים בטווח [0,255] שמרכיבים את צבע ה-RGBA של התג. לדוגמה, אדום אטום הוא
[255, 0, 0, 255]
. יכול להיות גם מחרוזת עם ערך CSS, למשל#FF0000
או#F00
לאדום אטום. -
tabId
מספר אופציונלי
השינוי יחול רק כשהכרטיסייה הספציפית נבחרת. ההגדרה מתאפסת אוטומטית כשסוגרים את הכרטיסייה.
-
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
setBadgeText()
chrome.action.setBadgeText(
details: object,
callback?: function,
): Promise<void>
הגדרת הטקסט של התג לפעולה. התג מוצג מעל הסמל.
פרמטרים
-
פרטים
אובייקט
-
tabId
מספר אופציונלי
השינוי יחול רק כשהכרטיסייה הספציפית נבחרת. ההגדרה מתאפסת אוטומטית כשסוגרים את הכרטיסייה.
-
text
מחרוזת אופציונלי
אפשר להעביר כל מספר של תווים, אבל רק ארבעה בערך יכולים להיכנס לרווח. אם מועברת מחרוזת ריקה (
''
), הטקסט בתג נמחק. אם מציינים אתtabId
והערך שלtext
הוא null, הטקסט של הכרטיסייה שצוינה נמחק ומוגדר כברירת מחדל לטקסט התג הגלובלי.
-
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
setBadgeTextColor()
chrome.action.setBadgeTextColor(
details: object,
callback?: function,
): Promise<void>
מגדיר את צבע הטקסט של התג.
פרמטרים
-
פרטים
אובייקט
-
צבע
מחרוזת | ColorArray
מערך של ארבעה מספרים שלמים בטווח [0,255] שמרכיבים את צבע ה-RGBA של התג. לדוגמה, אדום אטום הוא
[255, 0, 0, 255]
. יכול להיות גם מחרוזת עם ערך CSS, למשל#FF0000
או#F00
לאדום אטום. אם לא מגדירים את הערך הזה, המערכת בוחרת באופן אוטומטי צבע שיהיה בניגוד לצבע הרקע של התג, כדי שהטקסט יהיה גלוי. צבעים עם ערכי אלפא ששווים ל-0 לא יוגדרו ותוחזר שגיאה. -
tabId
מספר אופציונלי
השינוי יחול רק כשהכרטיסייה הספציפית נבחרת. ההגדרה מתאפסת אוטומטית כשסוגרים את הכרטיסייה.
-
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
setIcon()
chrome.action.setIcon(
details: object,
callback?: function,
): Promise<void>
הגדרת הסמל של הפעולה. אפשר לציין את הסמל כנתיב לקובץ תמונה, כנתוני פיקסלים מרכיב canvas או כמילון של אחד מהם. צריך לציין את המאפיין path או את המאפיין imageData.
פרמטרים
-
פרטים
אובייקט
-
imageData
ImageData | object optional
אובייקט ImageData או מילון {גודל -> ImageData} שמייצג את הסמל שצריך להגדיר. אם הסמל מוגדר כמילון, התמונה בפועל שתשמש תלויה בצפיפות הפיקסלים של המסך. אם מספר הפיקסלים של התמונה שמתאימים ליחידת שטח אחת במסך שווה ל-
scale
, התמונה בגודלscale
* n תיבחר, כאשר n הוא גודל הסמל בממשק המשתמש. צריך לציין לפחות תמונה אחת. הערה: המחרוזת 'details.imageData = foo' שקולה למחרוזת 'details.imageData = {'16': foo}' -
נתיב
מחרוזת | אובייקט אופציונלי
נתיב יחסי לתמונה או מילון {גודל -> נתיב יחסי לתמונה} שמצביע על הסמל שרוצים להגדיר. אם הסמל מוגדר כמילון, התמונה בפועל שתשמש תלויה בצפיפות הפיקסלים של המסך. אם מספר הפיקסלים של התמונה שמתאימים ליחידת שטח אחת במסך שווה ל-
scale
, התמונה בגודלscale
* n תיבחר, כאשר n הוא גודל הסמל בממשק המשתמש. צריך לציין לפחות תמונה אחת. הערה: המחרוזת details.path = foo שקולה למחרוזת details.path = {'16': foo} -
tabId
מספר אופציונלי
השינוי יחול רק כשהכרטיסייה הספציפית נבחרת. ההגדרה מתאפסת אוטומטית כשסוגרים את הכרטיסייה.
-
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
Chrome 96 ואילך
setPopup()
chrome.action.setPopup(
details: object,
callback?: function,
): Promise<void>
מגדיר את מסמך ה-HTML שייפתח כחלון קופץ כשהמשתמש לוחץ על סמל הפעולה.
פרמטרים
-
פרטים
אובייקט
-
פריט קופץ
מחרוזת
הנתיב היחסי לקובץ ה-HTML שיוצג בחלון קופץ. אם המדיניות מוגדרת למחרוזת ריקה (
''
), לא מוצג חלון קופץ. -
tabId
מספר אופציונלי
השינוי יחול רק כשהכרטיסייה הספציפית נבחרת. ההגדרה מתאפסת אוטומטית כשסוגרים את הכרטיסייה.
-
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
setTitle()
chrome.action.setTitle(
details: object,
callback?: function,
): Promise<void>
הגדרת השם של הפעולה. ההסבר הקצר הזה יופיע כשמעבירים את העכבר מעל התמונה.
פרמטרים
-
פרטים
אובייקט
-
tabId
מספר אופציונלי
השינוי יחול רק כשהכרטיסייה הספציפית נבחרת. ההגדרה מתאפסת אוטומטית כשסוגרים את הכרטיסייה.
-
title
מחרוזת
המחרוזת שהפעולה צריכה להציג כשמעבירים מעליה את העכבר.
-
-
callback
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
אירועים
onClicked
chrome.action.onClicked.addListener(
callback: function,
)
מופעל כשלוחצים על סמל של פעולה. האירוע הזה לא יופעל אם הפעולה כוללת חלון קופץ.
onUserSettingsChanged
chrome.action.onUserSettingsChanged.addListener(
callback: function,
)
מופעל כשמשתמש משנה הגדרות שקשורות לפעולה של תוסף.
פרמטרים
-
callback
פונקציה
הפרמטר
callback
נראה כך:(change: UserSettingsChange) => void
-
שינוי
-