پرش به محتوا
۳۱ ژوئیه ۲۰۲۶ · کتاب راهنما

دفترچه‌راهنما: ساخت افزونه‌های مرورگر

این مقاله محصول را در زمان انتشار توصیف می‌کند. برای قابلیت‌های فعلی به AI Builder و Agent Teams مراجعه کنید.

دفترچه‌راهنما: ساخت افزونه‌های مرورگر

پریا — هفته پیش از من پرسیدی آیا ابزار رصد کاهش قیمتی که داری می‌سازی باید فقط هر دقیقه صفحه محصول را برای «اطمینان» چک کند یا نه. قبل از اینکه این را در ساخت وارد کنی، بگذار کل ماجرا را برایت توضیح دهم، چون فاصله زمانی بررسی در واقع کوچک‌ترین تصمیم اینجاست، و درست درآوردن ساختار از ابتدا یکی دو چرخه بازبینی را قبل از عرضه از تو دور می‌کند.

از خود پرامپت شروع کن. گفتی «افزونه‌ای که این صفحه را زیر نظر بگیرد و وقتی قیمت افت کرد به من بگوید»، و این ایده خوبی است اما هنوز یک مشخصه (spec) کامل نیست — سازنده باید بداند کِی عمل می‌کند، نه فقط چه کاری انجام می‌دهد. ابزار رصد تو سومین حالت از سه شکل تریگر است، و ارزش دارد دو حالت دیگر را هم بشناسی، حتی اگر نیازشان نداشته باشی، چون شکل، مجوزها را تعیین می‌کند و مجوزها زمان بازبینی را.

  • کلیک-برای-اجرا ارزان‌ترین حالت است: یک پاپ‌آپ که وقتی کسی روی آیکون نوار ابزار می‌زند، یک‌بار روی صفحه فعلی اجرا می‌شود — چیزی مثل «همه قیمت‌های این صفحه را در یک لیست جمع کن».
  • اسکریپت محتوای همیشه‌فعال به‌صورت خودکار روی الگوی URLی که مشخص می‌کنی اجرا می‌شود — برای کاری مثل هایلایت کردن نام یک رقیب در هر صفحه‌ی یک دامنه خوب است، اما باید الگو را صریحاً بگویی، چون «روی سایت‌های داخلی ما» محدودتر از منظورت حدس زده می‌شود.
  • مورد تو سومی است: یک ابزار رصد پس‌زمینه، وضعیتی که چه تب باز باشد چه نه، پایدار می‌ماند، روی یک سرویس‌ورکر تحت MV3 اجرا می‌شود و وقتی چیزی تغییر کند، روی آیکون نشان (badge) می‌گذارد.

این همان شکلی است که سازنده باید با یک سؤال پیگیری با تو مخالفت کند، و همین کار را می‌کند — چون عدد فاصله زمانی بررسی یک مصالحه واقعی است، نه یک تشریفات.

که مرا برمی‌گرداند به غریزه «هر دقیقه» تو. مدتی پیش تقریباً همان ساختی که تو داری خواستم — رصد یک صفحه، نشان روی آیکون هنگام تغییر قیمت — و اولین نسخه هر ۶۰ ثانیه چک می‌کرد. برای یک نفر که محلی تست می‌کرد خوب کار می‌کرد. این را در تعداد واقعی افرادی که این را نصب می‌کنند ضرب کن و بدون دلیل داری صفحه محصول کسی را می‌کوبی، چون قیمت‌ها در یک لیستینگ خرده‌فروشی معمولی بیش از چند بار در روز تغییر نمی‌کند. در پرامپت به سازنده بگو «هر ۳۰ دقیقه چک کن». این مصالحه نیست، درخواست صادقانه‌تری است — هیچ‌کس نیاز به هشدار زیر یک دقیقه از یک افزونه مرورگر ندارد، و بعداً از خودت ممنون خواهی بود که مجبور نیستی به یک بازبین توضیح بدهی چرا افزونه‌ات روزی ۱۴۴۰ بار خانه‌ای زنگ می‌زند.

قسمت‌هایی که لازم نیست بهشان فکر کنی

گفتی درباره manifest نگرانی — نباش، این تنها چیزی است که واقعاً لازم نیست بهش دست بزنی. هر دو فروشگاه الان Manifest V3 را الزامی کرده‌اند؛ دیگر MV2 برای لیستینگ‌های جدید پذیرفته نمی‌شود و کروم به‌طور فعال افزونه‌های MV2 هنوز زنده را در حال کنار گذاشتن است. تغییر اصلی تحت MV3 این است که منطق پس‌زمینه‌ات به‌جای یک صفحه پس‌زمینه پایدار، به‌عنوان یک سرویس‌ورکر اجرا می‌شود — با یک رویداد راه‌اندازی می‌شود، مرورگر می‌تواند بین رویدادها آن را ببندد، و وضعیت باید از طریق chrome.storage عبور کند به‌جای اینکه فقط در یک متغیر زندگی کند. این دقیقاً همان نوع جزئیات چرخه حیاتی است که سازنده به‌صورت پیش‌فرض درست می‌نویسد. هیچ‌وقت یک فایل manifest نمی‌بینی مگر اینکه دنبال آن بگردی.

چیزی که واقعاً باید روی آن توجه بگذاری، مجوزهاست، چون این چیزی است که سرعت بازبینی تو را تعیین می‌کند، نه کد. ابزار رصد تو نیاز دارد alarms برای بررسی دوره‌ای و احتمالاً storage برای به‌خاطر سپردن آخرین قیمت — نیازی به tabs یا <all_urls>ندارد، و اگر «امکان کار روی هر سایتی در آینده» را بخواهی چون شاید بعداً بخواهی توسعه‌اش بدهی، سازنده دقیقاً همان را می‌سازد و تو داری برای ویژگی‌ای که هنوز وجود ندارد، دسترسی گسترده به هاست درخواست می‌کنی. این ترسناک‌ترین خط در دیالوگ نصب است — «خواندن و تغییر داده در هر سایتی که بازدید می‌کنی» — و همچنین همان چیزی است که یک بازبینی خودکار را به بازبینی دستی تبدیل می‌کند. کاری را توصیف کن که امروز انجام می‌دهد. اگر واقعاً نیاز داشتی، بعداً گسترشش بده.

دو چیز دیگر هم ارزش سی ثانیه توجه دارند قبل از اینکه این را تمام‌شده بدانی: رابط کاربری پاپ‌آپ و آیکون‌ها.

  • رابط کاربری پاپ‌آپ — یک صفحه تنظیمات پیش‌فرض، چک‌باکس‌های ساده، بدون سلسله‌مراتب، منبع واقعی نظرات یک‌ستاره‌ای است که هیچ ربطی به کارکرد افزونه ندارند. افزونه تو فقط چند تنظیم دارد (آدرس URL، شاید فاصله زمانی)، اما باز هم باید به‌نظر برسد بخشی از یک محصول است، نه یک فرم خام.
  • آیکون‌ها — آیکون را در هر چهار سایز کروم (۱۶، ۳۲، ۴۸، ۱۲۸ پیکسل، با ماتریس کمی متفاوت برای فایرفاکس) بررسی کن، چون یک لوگو که در ۱۲۸ واضح است ممکن است در ۱۶ به یک لکه تبدیل شود، دقیقاً همان جایی که بیشتر روز در یک نوار ابزار شلوغ زندگی می‌کند.

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

این را واقعی تست کن، نه فقط در پیش‌نمایش چت. چیزی که از ساخت می‌گیری یک افزونه واقعاً قابل بارگذاری است، پس برو به chrome://extensions، حالت توسعه‌دهنده را روشن کنید، «load unpacked» را انتخاب کنید و آن را روی همان صفحهٔ واقعی محصولی که برایتان اهمیت دارد اجرا کنید — نه یک نسخهٔ شبیه‌سازی‌شده از آن. من مشخصاً دو چیز را به‌صورت دستی بررسی می‌کردم: آیا پیام درخواست مجوز نصب دقیقاً همان چیزی را می‌گوید که با توجه به درخواستتان انتظار دارید، و اگر content script روزی به صفحه‌ای برسد که برایش ساخته نشده چه اتفاقی می‌افتد — آیا بی‌سروصدا شکست می‌خورد یا خطایی قابل‌مشاهده تولید می‌کند؟ هر دو کمتر از یک دقیقه وقت می‌برند و هر دو از آن دسته باگ‌هایی هستند که به‌محض نگاه کردن واضح‌اند و اگر نگاه نکنید نامرئی می‌مانند.

وقتی واقعاً آماده انتشار شدی، از طریق حساب‌های دولوپر خودت در هر دو فروشگاه پیش می‌روی — لیستینگ مال توست، این پلتفرم آن را برایت مدیریت نمی‌کند. و می‌خواهم اشاره کنم که این دو فروشگاه اصلاً متقارن نیستند، چون نمی‌خواهم تاریخ عرضه‌ات را با فرض تقارن آن‌ها برنامه‌ریزی کنی.

فروشگاهفرآیند ثبت
کروملیستینگ را به‌صورت خودکار پر می‌کند — عنوان، توضیحات، دسته‌بندی، و متن توجیه مجوزی که بازبینی واقعاً می‌خواند، تولیدشده از کاری که کد انجام می‌دهد نه نوشته‌شده جداگانه، که اهمیت دارد چون توجیه‌های ناهماهنگ به‌تنهایی یکی از دلایل رایج رد شدن هستند.
Firefoxاساساً بدون دخالت؛ خط پردازش موزیلا سبک‌تر است و ثبت فقط به‌سادگی انجام می‌شود.

کیت لیستینگی که بعد از پایان ساخت تولید می‌شود، اسکرین‌شات‌هایی از افزونه‌ات در حالت واقعی اجرا (نه یک ماکاپ)، متن لیستینگ، و پاسخ‌های مربوط به رویه‌های حریم خصوصی که با کد واقعی مقایسه شده‌اند، نه از حافظه پر شده باشند، تولید می‌کند. آن بخش آخر برای چیزی که با یک صفحه خارجی صحبت می‌کند، مهم‌تر از چیزی است که به‌نظر می‌رسد: پرسشنامه حریم خصوصی کروم سؤالات بله/خیر ساده‌ای درباره مدیریت داده می‌پرسد، و پاسخ «خیر» به «آیا این داده جمع‌آوری می‌کند» در حالی که ابزار رصد تو قیمت‌ها را می‌گیرد و ذخیره می‌کند، همان نوع بی‌صداقتی کوچکی است که بعد از انتشار حذف می‌شود، نه فقط قبل از آن رد. داشتن پاسخ‌هایی که با کد واقعی مقایسه شده‌اند، این شکاف را به‌طور خودکار برایت می‌بندد.

به‌طور خاص درباره تاریخ عرضه‌ات:
فروشگاهزمان معمول بازبینی
Firefoxچند ساعت، گاهی کمتر از یک ساعت
کرومچند روز، گاهی نزدیک به دو روز در هفته‌های شلوغ

افزونه‌های با پایداری پس‌زمینه مثل مال تو، بیشتر احتمال دارد در صف کندتر و بازبینی دستی قرار بگیرند تا یک افزونه ساده کلیک-برای-اجرا. هیچ‌کدام از ما نمی‌توانیم روی آن صف اهرمی بزنیم. اعلان خودت را بر اساس جدول زمانی کروم برنامه‌ریزی کن، نه فایرفاکس، و هیچ‌چیز را برای همان روزی که ارسال می‌کنی برنامه‌ریزی نکن.

یک نکته آخر، چون می‌شناسمت — احتمالاً الان به فکر اضافه کردن «همگام‌سازی لیست رصدم در همه دستگاه‌ها» و «ردیابی تاریخچه قیمت در طول زمان» بعد از عرضه هستی. اشکالی ندارد، اما بدان که هرکدام یک مجوز جدید است، و یک مجوز جدید می‌تواند به معنای بازبینی کندتر از چیزی باشد که تازه پشت سر گذاشتی. اگر مطمئنی نسخه بزرگ‌تر را می‌خواهی، واقعاً بهتر است همین الان آن را در پرامپت بخواهی و یک بازبینی کندتر را بپذیری، به‌جای اینکه مجوزها را قطره‌چکانی اضافه کنی. اگر هنوز مطمئن نیستی، همین چیزی که داری را عرضه کن — یک ابزار رصد با دامنه محدود سریع تأیید می‌شود، استفاده واقعی برایت می‌آورد، و استفاده واقعی الان بیشتر از یک لیست بلندتر از ویژگی‌ها که در صف کروم گیر کرده باشد ارزش دارد. همیشه می‌توانی بعداً بیشتر بخواهی؛ نمی‌توانی این عرضه را پس بگیری وقتی به‌خاطر چیزی که هنوز به آن نیاز نداشتی در بازبینی دستی گیر کرده.

راهنما
اشتراک‌گذاریXLinkedInFacebookRedditQuoraواتساپتلگرامایمیل
← همه مطالب