اتصال یک افزونه از طریق PWA کیوسک

برنامه‌های کروم پس از کروم ۱۰۲ برای ویندوز، لینوکس و مک‌او‌اس منسوخ خواهند شد. برای کروم‌او‌اس، برنامه‌های کروم حداقل تا ژانویه ۲۰۲۵ پشتیبانی خواهند شد، اما اکیداً توصیه می‌کنیم که به برنامه‌های وب مهاجرت کنید زیرا قرار است برنامه‌های کروم منسوخ شوند. پیش از این، برنامه‌های کروم در حالت کیوسک قابلیت‌های بیشتری داشتند که در حال حاضر فقط توسط برنامه‌های وب پشتیبانی نمی‌شوند. می‌توانید با نصب یک افزونه همراه با برنامه وب کیوسک خود، به استفاده از برخی از این قابلیت‌ها ادامه دهید.

افزونه‌ها چگونه مستقر می‌شوند؟

افزونه‌ها از طریق کنسول مدیریت کروم در صفحه پیکربندی کیوسک (که با پیمایش Devices > Chrome > Apps & Extensions > Kiosks دسترسی است) مستقر می‌شوند. افزونه‌ها می‌توانند یا به صورت خودگردان در یک لینک عمومی میزبانی شوند یا با میزبانی افزونه در فروشگاه وب کروم. برای اطلاعات بیشتر در مورد مدیریت افزونه‌ها در یک محیط سازمانی یا آموزشی، لطفاً به این سند مراجعه کنید.

چگونه می‌توانم APIهای افزونه را از برنامه وب خود فراخوانی کنم؟

از آنجا که می‌توانید افزونه‌های همراه را با برنامه وب کیوسک خود مستقر کنید، می‌توانید با فراخوانی APIهای افزونه ، از قابلیت‌های افزونه برای انجام کارهایی مانند دریافت اطلاعات مفید در مورد دستگاه و پلتفرم سخت‌افزاری یا مدیریت ویژگی‌های دسترسی کروم استفاده کنید.

اگر از APIهای مخصوص کیوسک استفاده می‌کنید، باید آنها را در مانیفست فعال کنید. سپس تبادل پیام بین برنامه وب کیوسک و افزونه همراه آن را پیاده‌سازی کنید تا بتوانند با یکدیگر ارتباط برقرار کنند.

فعال کردن APIهای افزونه مخصوص کیوسک

برخی از APIهای افزونه‌ها فقط در حالت کیوسک در دسترس هستند. برای اینکه افزونه شما بتواند این APIهای مخصوص کیوسک را فراخوانی کند، باید فیلد "kiosk_enabled" را به مانیفست اضافه کرده و آن را روی true تنظیم کنید:

{
    "manifest_version": 3,
    "version": "1.0",
    ...
    "kiosk_enabled": true
 }

پیاده‌سازی ارسال پیام

تنظیمات افزونه

برای دریافت و پاسخ به پیام‌ها از برنامه وب خود، باید یک اسکریپت پس‌زمینه ایجاد کنید که منتظر دریافت پیام‌ها از کلاینت (برنامه وب شما) باشد و سپس آن درخواست‌ها را به یک فراخوانی API مربوطه پروکسی کند. در مثال زیر، هنگامی که برنامه وب یک شیء پیام سفارشی حاوی methodName با نام callRestart ارسال می‌کند، یک درخواست برای راه‌اندازی مجدد دستگاه ChromeOS پروکسی می‌شود.

// message handler - extension code
chrome.runtime.onMessageExternal.addListener(function (request, sender, sendResponse) {
  if (request.methodName == 'callRestart') {
    chrome.runtime.restart();
  }
});

می‌توان مانیفست افزونه را طوری پیکربندی کرد که امکان فراخوانی توابع خارجی به افزونه را از طریق کلید externally_connectable فراهم کند. این کلید مشخص می‌کند که چه سایت‌ها و افزونه‌هایی مجاز به فراخوانی متدها در افزونه هستند. اطلاعات بیشتر در مورد افزونه‌های کروم و مانیفست نسخه ۳ را می‌توانید در مستندات رسمی بیابید.

{
    "background": {
       "service_worker": "background.js"
    },
    "description": "This restarts your ChromeOS device. Lucky you!",
    "manifest_version": 3,
    "name": "Restart your kiosk app",
    "version": "1.0",
    "kiosk_enabled": true,
    "externally_connectable": {
         "accepts_tls_channel_id": false,
         "matches": [ "://developer.android.com/" ]
      }
 }

راه اندازی برنامه وب

برای فراخوانی افزونه از یک برنامه وب، باید شناسه استاتیک افزونه آن را بدانید. این شناسه را می‌توانید در صفحه chrome://extensions که هنگام نصب افزونه کروم نمایش داده می‌شود، یا از فروشگاه وب کروم پس از آپلود افزونه، پیدا کنید. این به برنامه وب شما اجازه می‌دهد تا افزونه دقیقی را که می‌خواهد با آن ارتباط برقرار کند، مشخص کند. پس از آن، chrome.runtime.sendMessage را فراخوانی کنید و شناسه افزونه را به همراه پیامی که می‌خواهید به افزونه ارسال کنید، وارد کنید.

const STATIC_EXTENSION_ID = 'abcdefghijklmnopqrstuvwxyz'; // found from chrome extensions page of chrome web store.
const callExtensionAPI = function (method) {
  chrome.runtime.sendMessage(STATIC_EXTENSION_ID, {
    methodName: method,
  });
};
callExtensionAPI('callRestart');

برای اطلاعات بیشتر در مورد اتصال صفحات وب به افزونه‌ها برای ارسال پیام، لطفاً به این مستندات مراجعه کنید.

نکته: افزونه‌ها و برنامه‌های وب نمی‌توانند به طور دلخواه با یکدیگر ارتباط برقرار کنند. افزونه فقط سعی می‌کند به پیام‌های دامنه‌هایی که در بخش externally_connectable مانیفست آن فهرست شده‌اند، گوش دهد. به طور مشابه، یک برنامه وب باید شناسه استاتیک افزونه‌ای را که می‌خواهد با آن ارتباط برقرار کند، بداند.