پرش به محتوای اصلی
علی فاتحی

توسعه اکستنشن کروم

افزونه مرورگر برای خودکارکردن کارهای تکراری در پنل‌های وب — جایی که سرویس مقصد API ندارد یا دسترسی نمی‌دهد.

چه چیزی تحویل می‌گیرید

  • اکستنشن کروم بر پایه Manifest V3 با TypeScript
  • رابط کاربری popup یا side panel متناسب با کار
  • اسکریپت محتوا برای تعامل با صفحه هدف
  • ذخیره‌سازی امن تنظیمات با chrome.storage
  • بسته آماده انتشار در Chrome Web Store یا نصب داخلی سازمانی
  • مستندات نصب و به‌روزرسانی

روند کار

  1. ۱

    بررسی صفحه هدف

    اول می‌بینم پنل یا سایتی که قرار است با آن کار کنیم چطور ساخته شده و آیا راه پایدارتری — مثل یک API رسمی — وجود دارد یا نه.

  2. ۲

    ساخت و تست روی داده واقعی

    اکستنشن روی همان محیطی که قرار است استفاده شود تست می‌شود، نه روی یک صفحه نمونه.

  3. ۳

    بسته‌بندی و انتشار

    بسته نهایی برای انتشار عمومی در Web Store یا نصب داخلی در سازمان آماده می‌شود.

اکستنشن کِی جواب درستی است

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

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

نکته‌ای که Manifest V3 عوض کرد

در Manifest V3، background یک service worker است که وقتی کاری نمی‌کند خاموش می‌شود. هر متغیری که در حافظه نگه داشته باشید، از بین می‌رود.

// اشتباه رایج: وضعیت در متغیر ماژول.
// let counter = 0;  ← با خاموش‌شدن worker صفر می‌شود.
 
// درست: وضعیت در storage.
async function increment(): Promise<number> {
  const { counter = 0 } = await chrome.storage.local.get("counter");
  const next = counter + 1;
  await chrome.storage.local.set({ counter: next });
  return next;
}

دسترسی‌ها را کم می‌گیرم

هر مجوز اضافه در manifest.json هم ریسک امنیتی است و هم دلیل رد شدن در بازبینی Web Store. به‌جای <all_urls>، فقط دامنه‌هایی که لازم است. به‌جای دسترسی دائم، activeTab وقتی کاربر روی آیکون کلیک می‌کند.

{
  "manifest_version": 3,
  "permissions": ["storage", "activeTab"],
  "host_permissions": ["https://panel.example.com/*"]
}

این تفاوت هم در سرعت تأیید Web Store اثر دارد و هم در اینکه کاربر موقع نصب چه پیامی می‌بیند.

سؤال‌های پرتکرار

برای استفاده داخلی شرکت هم می‌شود؟

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

اکستنشن می‌تواند از سایت‌های دیگر داده بگیرد؟

از نظر فنی بله، ولی من فقط روی سرویس‌هایی کار می‌کنم که شما حساب و دسترسی قانونی به آن‌ها دارید و شرایط استفاده‌شان این کار را منع نکرده باشد.

Manifest V3 چه فرقی دارد؟

مدل قدیمی background page حذف شده و جایش service worker آمده که در زمان بیکاری خاموش می‌شود. یعنی اکستنشن نمی‌تواند وضعیت را در حافظه نگه دارد و باید در storage ذخیره شود. این نکته‌ای است که خیلی از اکستنشن‌های قدیمی روی آن شکستند.

برای فایرفاکس هم کار می‌کند؟

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

خدمات مرتبط

مطمئن نیستید کدام یکی است؟

کافی است بنویسید چه مشکلی دارید. تشخیص اینکه کار در کدام دسته می‌افتد با من.

شروع یک پروژه