اگر قصد ساخت افزونه برای مرورگرهایی مانند Chrome، Safari، Firefox، Opera و دیگر مرورگرها وجود داشته باشد، احتمالاً عبارت «WebExtension» در اسناد پشتیبانی به چشم میخورد. با اینکه WebExtension و افزونهٔ Chrome در اصل فناوری مشابهی را توصیف میکنند، برای توسعهٔ افزونههای چندمروری باید به تفاوتهای آنها توجه کرد.
این راهنما پلتفرم API مشترکی را که پشت افزونههای Chrome و WebExtension قرار دارد معرفی میکند و به برخی از چالشهایی که هنگام توسعه برای چند مرورگر رخ میدهد میپردازد.
WebExtension چیست؟
Chrome در سال ۲۰۰۹ برای نخستینبار از افزونههای مرورگر پشتیبانی کرد و همین موضوع نقش مهمی در موفقیت آن داشت. ساخت افزونهها بسیار ساده بود و معمولاً با بهروزرسانیهای جدید Chrome دچار مشکل نمیشدند. Manifest V2 نخستین تغییر بزرگ و ناسازگار بود که گوگل از سال ۲۰۱۳ اعمال آن را آغاز کرد.
زمانی که مرورگرهای دیگر از Chromium بهعنوان پایهٔ فنی خود استفاده کردند، API افزونهها نیز به همان شکل باقی ماند. به همین دلیل افزونههایی که برای Chrome ساخته میشوند اغلب بدون تغییر روی مرورگرهایی مانند Opera، Vivaldi، Brave، Edge و ChatGPT Atlas اجرا میشوند. بسیاری از آنها حتی مستقیماً از Chrome Web Store قابل نصب هستند.
در سال ۲۰۱۵، Mozilla نیز تصمیم گرفت Firefox را به سمت API افزونههای Chrome ببرد، زیرا افزونههای XUL قدیمی پیچیده و مستعد خرابی بودند. اما ازآنجاکه Firefox مبتنی بر Chromium نیست، لازم بود Mozilla کل API را مهندسی معکوس کند. این نسخه جدید «WebExtensions» نامگذاری شد و بهعنوان یک استاندارد میانمروری مطرح شد.
Apple نیز همین رویکرد را برای Safari در پیش گرفت و API افزونههای Chromium را مهندسی معکوس کرد و همان نام WebExtension را به کار برد، گرچه پیادهسازی Safari یکسان با Chrome یا Firefox نیست.
با وجود این نام مشترک، WebExtensions استانداردی کاملاً یکپارچه و همسان نیست. وضعیت بیشتر شبیه روزهای ابتدایی توسعهٔ وب است که قابلیتهای مرورگرها کاملاً متفاوت بود. بهعبارتی WebExtensions بیشتر شبیه مجموعهای از «راهنماها» است تا «قوانین ثابت».
WebExtensions در برابر افزونههای Chrome
تفاوت اصلی بین WebExtension و افزونهٔ Chrome در این است که باید رفتار هر مرورگر بررسی شود و مطمئن شد APIهای مورد استفاده روی همهٔ مرورگرهای هدف پشتیبانی میشوند. بهترین منبع برای این کار MDN است که برای هر API جدول سازگاری مرورگرها را ارائه میدهد.
درحالیکه یک وبسایت مدرن که برای Chrome توسعه یافته اغلب بدون تغییر روی Firefox و Safari نیز کار میکند، افزونههای مرورگر چنین سازگاری تضمینشدهای ندارند. APIهای جدید Chromium معمولاً با تأخیر یا حتی هرگز در Firefox و Safari پیادهسازی نمیشوند و هر مرورگر مجموعهای از ویژگیهای انحصاری خود را دارد.
نمونهای از این تفاوت، API مربوط به سایدبار است. Opera نخستین مرورگری بود که sidebarAction را معرفی کرد و Firefox نیز بعدها آن را پیادهسازی کرد؛ اما Chrome این API را نداشت. زمانی که Chrome سرانجام ویژگی سایدبار را ارائه داد، API کاملاً جدیدی با نام sidePanel معرفی کرد. تا اواخر ۲۰۲۵، Firefox این API را اضافه نکرده و Safari هیچکدام از آنها را پشتیبانی نمیکند.
تفاوت مهم دیگر در نامفضا (namespace) است. در APIهای Chromium اغلب توابع با «chrome» شروع میشوند (مانند chrome.storage)، اما در مستندات WebExtension معمولاً از «browser» استفاده میشود (مانند browser.storage).
Firefox و Safari هر دو «chrome» را بهعنوان معادل «browser» پشتیبانی میکنند، اما Chrome اصلاً نامفضای browser را نمیشناسد.
ساخت افزونههای چندمروری
بهترین اصول توسعهٔ وب چندمروری در این زمینه نیز صدق میکند. لازم است افزونه روی تمامی مرورگرهای هدف آزمایش شود، زیرا برخی ویژگیها در مرورگرهای مختلف رفتار متفاوتی دارند.
میتوان مجموعهای از تستها ایجاد کرد و در طول فرایند توسعه روی مرورگرهای مختلف اجرا کرد. در صورت پیدا شدن یک ناسازگاری، باید از تشخیص قابلیت (feature detection) استفاده شود، نه شناسایی مرورگر (browser sniffing).
نکتهٔ مهم دیگر انتخاب نامفضا است: chrome یا browser. بسیاری از توسعهدهندگان از chrome استفاده میکنند و برای پشتیبانی از browser میتوان از polyfill موزیلا استفاده کرد.
برای بررسی ناسازگاریها، صفحهٔ «Chrome incompatibilities» در MDN بهترین منبع است. بسیاری از مشکلات فعلی مربوط به APIهای Manifest V3 هستند.
در زمان انتشار افزونه، لازم نیست از تمام مخزنهای اختصاصی مرورگرها استفاده شود. Chrome Web Store علاوه بر Chrome، توسط کاربران Edge، Opera و Vivaldi نیز قابلاستفاده است. بااینحال، انتشار در مخزنهای اختصاصی هر مرورگر باعث افزایش دیدهشدن افزونه میشود؛ مثلاً کاربران Edge معمولاً از مخزن Edge Add-ons استفاده میکنند. کاربران Firefox و Safari نمیتوانند افزونهها را مستقیماً از Chrome Web Store نصب کنند.
بهطور کلی، توسعه افزونههای چندمروری آنقدرها پیچیده نیست، اما زمان بیشتری برای تست لازم دارد، زیرا برخلاف وبسایتها نمیتوان سازگاری کامل میان مرورگرها را فرض کرد. بسیاری از افزونهها تنها به تغییرات جزئی در manifest و کد نیاز دارند تا روی چند مرورگر عمل کنند.











