شرح
از commands API برای افزودن میانبرهای صفحهکلید استفاده کنید که کنشها را در افزونه شما راهاندازی میکنند، برای مثال، کنشی برای باز کردن کنش مرورگر یا ارسال فرمان به افزونه.
مانیفست
مفاهیم و کاربرد
Commands API به توسعهدهندگان افزونه اجازه میدهد تا فرمانهای خاصی را تعریف کنند و
آنها را به ترکیب کلید پیشفرض متصل کنند. هر فرمانی که افزونه میپذیرد باید بهعنوان ویژگیهای شیء "commands" در مانیفست افزونه اعلام شود.
کلید ویژگی بهعنوان نام فرمان استفاده میشود. اشیاء فرمان میتوانند دو ویژگی داشته باشند.
suggested_keyویژگی اختیاری که میانبرهای صفحهکلید پیشفرض را برای فرمان اعلام میکند. اگر حذف شود، فرمان لغو خواهد شد. این ویژگی میتواند مقدار رشته یا شیء داشته باشد.
مقدار رشته میانبر صفحهکلید پیشفرضی را که باید در همه پلاتفرمها استفاده شود مشخص میکند.
- مقدار شیء به توسعهدهنده افزونه اجازه میدهد میانبر صفحهکلید را برای هر پلاتفرم سفارشیسازی کند. هنگام ارائه میانبرهای مختص پلاتفرم، ویژگیهای شیء معتبر عبارتاند از
default،chromeos،linux،mac، وwindows.
برای جزئیات بیشتر، الزامات ترکیب کلید را ببینید.
- مقدار شیء به توسعهدهنده افزونه اجازه میدهد میانبر صفحهکلید را برای هر پلاتفرم سفارشیسازی کند. هنگام ارائه میانبرهای مختص پلاتفرم، ویژگیهای شیء معتبر عبارتاند از
description- رشتهای که برای ارائه شرح کوتاهی از هدف فرمان به کاربر استفاده میشود. این رشته در میانای کاربری مدیریت میانبر صفحهکلید افزونه نشان داده میشود. شرح برای فرمانهای استاندارد لازم است، اما برای فرمانهای کنش نادیده گرفته میشود.
افزونه میتواند فرمانهای زیادی داشته باشد، اما حداکثر میتواند چهار میانبر صفحهکلید پیشنهادی را مشخص کند. کاربر میتواند بهصورت دستی میانبرهای بیشتری از کادر گفتگوی
chrome://extensions/shortcuts اضافه کند.
کلیدهای پشتیبانیشده
کلیدهای زیر میانبرهای فرمان قابلاستفاده هستند. تعاریف کلیدی به حروف بزرگ و کوچک حساس هستند. تلاش برای بار کردن افزونهای با کلید دارای حروف بزرگ و کوچک نادرست منجر به خطای تجزیه مانیفست در زمان نصب میشود.
- کلیدهای آلفا
A…Z- کلیدهای عددی
0…9- رشتههای کلید استاندارد
عمومی–
Comma،Period،Home،End،PageUp،PageDown،Space،Insert،Deleteکلیدهای جهتنما–
Up،Down،Left،Rightکلیدهای رسانه–
MediaNextTrack،MediaPlayPause،MediaPrevTrack،MediaStop- رشتههای کلید توصیفگر
Ctrl،Alt،Shift،MacCtrl(فقط macOS)،Option(فقط macOS)،Command(فقط macOS)،Search(فقط ChromeOS)
الزامات ترکیب کلید
میانبرهای فرمان افزونه باید شامل
CtrlیاAltباشد.اصلاحگرها نمیتوانند در ترکیب با «کلیدهای رسانه» استفاده شوند.
در بسیاریاز صفحهکلیدهای macOS،
Altبه کلید Option اشاره دارد.در macOS، از
CommandیاMacCtrlنیز میتوان بهجایCtrlاستفاده کرد، و از کلیدOptionمیتوان بهجایAltاستفاده کرد (مورد بعدی را ببینید).
در macOS،
Ctrlبهطور خودکار بهCommandتبدیل میشود.Commandرا میتوان در میانبر"mac"نیز استفاده کرد تا بهطور صریح به کلید Command اشاره کند.برای استفاده از کلید Control در macOS، هنگام تعریف میانبر
"mac"،Ctrlرا باMacCtrlجایگزین کنید.استفاده از
MacCtrlدر ترکیب برای پلاتفرم دیگر باعث ایجاد خطای اعتبارسنجی میشود و از نصب افزونه جلوگیری میکند.
Shiftدر همه پلاتفرمها یک اصلاحکننده اختیاری است.Searchیک کلید توصیفگر اختیاری است که مختص ChromeOS است.برخی میانبرهای سیستمعامل و Chrome (مثلاً مدیریت پنجره) همیشه بر میانبرهای فرمان «افزونه» اولویت دارند و نمیتوان آنها را لغو کرد.
مدیریت رویدادهای فرمان
manifest.json:
{
"name": "My extension",
...
"commands": {
"run-foo": {
"suggested_key": {
"default": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y"
},
"description": "Run \"foo\" on the current page."
},
"_execute_action": {
"suggested_key": {
"windows": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y",
"chromeos": "Ctrl+Shift+U",
"linux": "Ctrl+Shift+J"
}
}
},
...
}
در کارگر سرویس، میتوانید بااستفاده از onCommand.addListener، یک گرداننده را به هریک از فرمانهای تعریفشده در مانیفست مقید کنید. برای مثال:
service-worker.js:
browser.commands.onCommand.addListener((command) => {
console.log(`Command: ${command}`);
});
فرمانهای کنش
فرمانهای _execute_action (Manifest V3)، _execute_browser_action (Manifest V2)،
و _execute_page_action (Manifest V2) برای کنش
راهاندازی کنش، کنش مرورگر، یا کنش صفحه بهترتیب رزرو شدهاند. این فرمانها
رویدادهای command.onCommand را مانند فرمانهای استاندارد
ارسال نمیکنند.
اگر لازم است براساس باز شدن بالاپر اقدامی انجام دهید، به رویداد DOMContentLoaded در جاوا اسکریپت بالاپر گوش دهید.
حوزه
بهطور پیشفرض، فرمانها به مرورگر Chrome محدود میشوند. این یعنی وقتی مرورگر در کانون توجه نیست، میانبرهای فرمان غیرفعال هستند. از Chrome نسخه ۳۵، توسعهدهندگان افزونه میتوانند بهصورت اختیاری فرمانی را بهعنوان «سراسری» علامتگذاری کنند. فرمانهای سراسری وقتی Chrome در کانون توجه نیست نیز کار میکنند.
پیشنهادهای میانبر صفحهکلید برای فرمانهای سراسری به
Ctrl+Shift+[0..9] محدود است. این یک اقدام محافظتی برای بهحداقل رساندن خطر
لغو میانبرها در برنامههای دیگر است، زیرا اگر برای مثال، Alt+P
بهعنوان سراسری مجاز باشد، میانبر صفحهکلید برای باز کردن کادر گفتگوی چاپ ممکن است
در برنامههای دیگر کار نکند.
کاربران نهایی میتوانند بااستفاده از میانای کاربر ارائهشده در chrome://extensions/shortcuts، فرمانهای سراسری را به ترکیب کلید دلخواهشان نگاشت مجدد کنند.
مثال:
manifest.json:
{
"name": "My extension",
...
"commands": {
"toggle-feature-foo": {
"suggested_key": {
"default": "Ctrl+Shift+5"
},
"description": "Toggle feature foo",
"global": true
}
},
...
}
مثالها
مثالهای زیر عملکرد اصلی Commands API را نشان میدهد.
فرمان اولیه
فرمانها به افزونهها اجازه میدهند منطق را به میانبرهای صفحهکلید که میتوانند توسط کاربر فراخوانی شوند، نگاشت کنند. در سادهترین حالت، یک فرمان فقط به یک اعلان فرمان در مانیفست افزونه و یک ثبت شنونده نیاز دارد، همانطور که در مثال زیر نشان داده شده است.
manifest.json:
{
"name": "Command demo - basic",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "service-worker.js"
},
"commands": {
"inject-script": {
"suggested_key": "Ctrl+Shift+Y",
"description": "Inject a script on the page"
}
}
}
service-worker.js:
browser.commands.onCommand.addListener((command) => {
console.log(`Command "${command}" triggered`);
});
فرمان کنش
همانطور که در بخش مفاهیم و کاربرد توضیح داده شده است، میتوانید فرمانی را به کنش افزونه نیز نگاشت کنید. مثال زیر یک اسکریپت محتوا را تزریق میکند که وقتی کاربر روی کنش افزونه کلیک میکند یا میانبر صفحهکلید را راهاندازی میکند، هشداری را در صفحه فعلی نشان میدهد.
manifest.json:
{
"name": "Commands demo - action invocation",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "service-worker.js"
},
"permissions": ["activeTab", "scripting"],
"action": {},
"commands": {
"_execute_action": {
"suggested_key": {
"default": "Ctrl+U",
"mac": "Command+U"
}
}
}
}
service-worker.js:
browser.action.onClicked.addListener((tab) => {
browser.scripting.executeScript({
target: {tabId: tab.id},
func: contentScriptFunc,
args: ['action'],
});
});
function contentScriptFunc(name) {
alert(`"${name}" executed`);
}
// This callback WILL NOT be called for "_execute_action"
browser.commands.onCommand.addListener((command) => {
console.log(`Command "${command}" called`);
});
درستیسنجی فرمانهای ثبتشده
اگر افزونهای تلاش کند میانبری را ثبت کند که قبلاً توسط افزونه دیگری استفاده شده است، میانبر افزونه دوم طبق انتظار ثبت نخواهد شد. با پیشبینی این احتمال و بررسی تداخلها در زمان نصب، میتوانید تجربه کاربر نهایی را بهبود ببخشید.
service-worker.js:
browser.runtime.onInstalled.addListener((details) => {
if (details.reason === browser.runtime.OnInstalledReason.INSTALL) {
checkCommandShortcuts();
}
});
// Only use this function during the initial install phase. After
// installation the user may have intentionally unassigned commands.
function checkCommandShortcuts() {
browser.commands.getAll((commands) => {
let missingShortcuts = [];
for (let {name, shortcut} of commands) {
if (shortcut === '') {
missingShortcuts.push(name);
}
}
if (missingShortcuts.length > 0) {
// Update the extension UI to inform the user that one or more
// commands are currently unassigned.
}
});
}
انواع
Command
مشخصات
-
description
رشته اختیاری
شرح «فرمان افزونه»
-
نام
رشته اختیاری
نام «فرمان افزونه»
-
میانبر
رشته اختیاری
میانبر فعال برای این فرمان، یا اگر فعال نباشد، خالی است.
روشها
getAll()
browser.commands.getAll(): Promise<Command[]>
همه فرمانهای افزونه ثبتشده برای این افزونه و میانبر آنها (درصورت فعال بودن) را برمیگرداند. قبلاز Chrome 110، این فرمان _execute_action را برنمیگرداند.
بازگشتیها
-
Promise<Command[]>
Chrome نسخه ۹۶ و بالاتر browser.* از Chrome نسخه ۱۴۸با فهرستی از فرمانهای ثبتشده حلوفصل میشود.