از زمان راهاندازی برنامههای افزودنی Chrome، این پلتفرم به توسعهدهندگان اجازه میدهد تا با استفاده از کنشها، عملکرد برنامههای افزودنی را مستقیماً در سطح بالای رابط کاربری Chrome نمایش دهند. یک کنش یک دکمه نماد است که می تواند یک پنجره بازشو باز کند یا برخی از عملکردها را در برنامه افزودنی فعال کند. از لحاظ تاریخی، کروم از دو نوع عملکرد پشتیبانی میکرد، اکشنهای مرورگر و اقدامات صفحه. Manifest V3 با ادغام عملکرد خود در یک API جدید chrome.action این مورد را تغییر داد.
تاریخچه کوتاهی از اقدامات توسعه
در حالی که chrome.action
خود در Manifest V3 جدید است، عملکرد اولیه ای که ارائه می دهد به زمانی برمی گردد که برنامه های افزودنی برای اولین بار در ژانویه 2010 به حالت پایدار درآمدند . اولین نسخه پایدار پلت فرم برنامه های افزودنی کروم از دو نوع عملکرد مختلف پشتیبانی می کرد: اقدامات مرورگر و اقدامات صفحه. .
اقدامات مرورگر به توسعهدهندگان برنامههای افزودنی اجازه میدهد نمادی را «در نوار ابزار اصلی Google Chrome، در سمت راست نوار آدرس» ( منبع ) نمایش دهند و راهی آسان را برای فعال کردن عملکرد برنامههای افزودنی در هر صفحه در اختیار کاربران قرار دهد. از سوی دیگر، اقدامات صفحه برای "نمایندگی اقداماتی بود که می توان در صفحه فعلی انجام داد، اما برای همه صفحات قابل اجرا نیست" ( منبع ).
به عبارت دیگر، اقدامات مرورگر به توسعهدهندگان برنامههای افزودنی یک سطح رابط کاربری دائمی در مرورگر میدهد، در حالی که اقدامات صفحه تنها زمانی ظاهر میشوند که برنامه افزودنی بتواند کاری مفید در صفحه فعلی انجام دهد.
هر دو نوع عملکرد اختیاری بودند، بنابراین یک توسعهدهنده برنامه افزودنی میتوانست انتخاب کند که هیچ اقدامی، یک عملکرد صفحه، یا یک عملکرد مرورگر را ارائه دهد (تعیین چندین کنش مجاز نیست).
تقریباً شش سال بعد، Chrome 49 یک الگوی رابط کاربری جدید برای برنامههای افزودنی معرفی کرد. برای اینکه به کاربران کمک کند بفهمند چه برنامههای افزودنی دارند، Chrome شروع به نمایش همه برنامههای افزودنی فعال در سمت راست omnibox کرد. کاربران در صورت تمایل میتوانند افزونهها را در منوی کروم «سرریز» کنند.
به منظور نمایش یک نماد برای هر برنامه افزودنی، این به روز رسانی همچنین دو تغییر مهم را در نحوه رفتار افزونه ها در رابط کاربری کروم ایجاد کرد. ابتدا، تمام برنامه های افزودنی شروع به نمایش نمادها در نوار ابزار کردند. اگر برنامه افزودنی نمادی نداشت، کروم یک نماد را برای آن تولید میکرد. ثانیاً، اقدامات صفحه در کنار اقدامات مرورگر به نوار ابزار منتقل شدند و امکان تمایز بین حالتهای "نمایش" و "پنهان کردن" آنها فراهم شد.
این تغییر به افزونههای اکشن صفحه اجازه داد همانطور که انتظار میرفت به کار خود ادامه دهند، اما نقش اقدامات صفحه را نیز در طول زمان کاهش داد. یکی از تأثیرات طراحی مجدد UI این بود که اقدامات صفحه به طور مؤثر توسط اقدامات مرورگر درج می شد. از آنجایی که همه برنامههای افزودنی در نوار ابزار ظاهر میشوند، کاربران انتظار داشتند که با کلیک کردن روی نماد نوار ابزار یک برنامه افزودنی، برنامه افزودنی فراخوانی شود، و اقدامات مرورگر به تعامل مهمتر برای افزونههای Chrome تبدیل شد.
تغییرات آشکار V3
رابط کاربری کروم و برنامههای افزودنی در سالهای پس از طراحی مجدد رابط کاربری افزونه در سال 2016 به تکامل خود ادامه دادند، اما اقدامات مرورگر و اقدامات صفحه تا حد زیادی بدون تغییر باقی ماندند. یعنی حداقل تا زمانی که ما شروع به برنامه ریزی برای مدرن سازی پلتفرم افزونه ها با Manifest V3 کردیم.
برای تیم برنامههای افزودنی واضح بود که اقدامات مرورگر و اقدامات صفحه به طور فزایندهای یک تمایز بیمعنی هستند. بدتر از آن، تفاوتهای رفتاری ظریف آنها باعث شد تا توسعهدهندگان نتوانند از کدام یک استفاده کنند. متوجه شدیم که میتوانیم با ترکیب کردن عملکرد مرورگر و صفحه در یک «عمل» به این مسائل بپردازیم.
Action API را وارد کنید؛ chrome.action
مستقیماً مشابه chrome.browserAction
است، اما چند تفاوت قابل توجه دارد.
ابتدا، chrome.action
یک روش جدید به نام getUserSettings()
معرفی می کند. این روش به توسعه دهندگان برنامه های افزودنی راهی می دهد تا بررسی کنند که آیا کاربر اقدام برنامه افزودنی خود را به نوار ابزار پین کرده است یا خیر.
let userSettings = await chrome.action.getUserSettings();
console.log(`Is the action pinned? ${userSettings.isOnToolbar ? 'Yes' : 'No'}.`);
«getUserSettings» ممکن است در مقایسه با مثلاً «isPinned» نام غیرمعمولی برای این عملکرد به نظر برسد، اما تاریخچه اقدامات در کروم نشان میدهد که رابط کاربری مرورگر سریعتر از APIهای افزونه تغییر میکند. به این ترتیب، هدف ما از این API این است که تنظیمات برگزیده کاربر مربوط به عملکرد را در رابطهای عمومی به منظور به حداقل رساندن ریزش API در آینده نشان دهیم. همچنین به سایر فروشندگان مرورگر اجازه می دهد مفاهیم UI خاص مرورگر را در شی UserSettings که با این روش برگردانده شده است، افشا کنند.
دوم، نماد و وضعیت فعال/غیرفعال عملکرد یک برنامه افزودنی را می توان با استفاده از API محتوای اعلامی کنترل کرد. این مهم است زیرا به برنامههای افزودنی اجازه میدهد بدون دسترسی به محتوا یا حتی URL صفحاتی که بازدید میکنند، به رفتار مرور کاربر واکنش نشان دهند. به عنوان مثال، بیایید ببینیم که چگونه یک برنامه افزودنی می تواند عملکرد خود را هنگام بازدید از صفحات در example.com فعال کند.
// Manifest V3
chrome.runtime.onInstalled.addListener(() => {
chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
chrome.declarativeContent.onPageChanged.addRules([
{
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: {hostSuffix: '.example.com'},
})
],
actions: [new chrome.declarativeContent.ShowAction()]
}
]);
});
});
کد بالا تقریباً مشابه کاری است که یک برنامه افزودنی با یک عمل صفحه انجام می دهد. تنها تفاوت این است که در Manifest V3 ما از declarativeContent.ShowAction
به جای declarativeContent.ShowPageAction
در Manifest V2 استفاده کردیم.
در نهایت، مسدودکنندههای محتوا میتوانند از روش setExtensionActionOptions
در DeclarativeNetRequest API برای نمایش تعداد درخواستهای مسدود شده توسط افزونه برای یک برگه خاص استفاده کنند. این قابلیت مهم است زیرا به مسدودکنندههای محتوا اجازه میدهد تا کاربران نهایی را بدون قرار دادن ابردادههای بالقوه حساس مرور در معرض برنامه افزودنی مطلع نگه دارند.
جمع کنید
مدرن کردن پلتفرم افزونه های کروم یکی از انگیزه های اصلی ما برای Manifest V3 بود. در بسیاری از موارد این به معنای تغییر به فناوریهای جدید بود، اما به معنای سادهسازی سطح API ما نیز بود. هدف ما اینجا همین بود.
امیدوارم این پست به روشن کردن این گوشه خاص از پلتفرم Manifest V3 کمک کرده باشد. برای کسب اطلاعات بیشتر درباره نحوه نزدیک شدن تیم Chrome به آینده برنامههای افزودنی مرورگر، چشمانداز پلتفرم و نمای کلی صفحات Manifest V3 را در اسناد برنامهنویس ما بررسی کنید. همچنین میتوانید درباره برنامههای افزودنی Chrome با برنامهنویسان دیگر در گروه Google -extensions Chromium بحث کنید.