افزونه‌ی محافظ متن ارسال‌نشده

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

ده دقیقه برای یک کامنت، یک جواب در انجمن یا یک فرم طولانی وقت می‌گذارید، و بعد با یک Ctrl+W اشتباه، یک رفرش ناخواسته یا کلیک روی لینکی دیگر، همه‌اش از بین می‌رود. بیشتر سایت‌ها در این لحظه هیچ هشداری نمی‌دهند. Unsent Text Guard را ساختم تا مرورگر، پیش از بستن یا ترک صفحه‌ای که در آن متنی تایپ کرده‌اید و هنوز نفرستاده‌اید، از شما بپرسد «صفحه را ترک می‌کنید؟».

نصب: فایرفاکس · مایکروسافت اج

چه کار می‌کند

  • فقط متنی که خودتان تایپ کرده‌اید حساب می‌شود: متنی که خود سایت در کادر گذاشته، چیزی که پر کردن خودکار مرورگر وارد کرده و پیش‌نویسی که سایت بازیابی کرده، هیچ‌وقت هشدار نمی‌دهد. پس پیغام بی‌دلیل نمی‌بینید، فقط وقتی که واقعاً چیزی برای از دست دادن دارید.
  • تایپ‌های کوتاه نادیده گرفته می‌شوند: هشدار فقط وقتی فعال می‌شود که دست‌کم ۲۰ حرف (بدون فاصله‌ها) تایپ کرده باشید. این عدد را از پنجره‌ی افزونه می‌توانید عوض کنید.
  • متن فرستاده‌شده دیگر محافظت نمی‌شود: ارسال فرم یعنی متن فرستاده شده. در چت‌ها و بخش‌های کامنت هم، وقتی سایت بعد از فرستادن کادر را خالی یا حذف کند، آن متن دیگر حساب نمی‌شود.
  • کادرهای رمز عبور کاملاً نادیده گرفته می‌شوند.
  • کنترل دست خودتان است: پنجره‌ی افزونه در نوار ابزار نشان می‌دهد چند کادر در صفحه‌ی فعلی متن ارسال‌نشده دارند، و با یک کلیک می‌توانید افزونه را برای همان سایت خاموش کنید.
  • حریم خصوصی: متن شما هیچ‌وقت از صفحه بیرون نمی‌رود و هیچ‌جا ذخیره نمی‌شود. افزونه هیچ درخواست شبکه‌ای نمی‌فرستد و تنها چیزی که ذخیره می‌کند دو تنظیم است: حداقل تعداد حروف و فهرست سایت‌هایی که خاموشش کرده‌اید.

هشداری که می‌بینید همان پنجره‌ی «Leave page?» خود مرورگر است؛ مرورگرها اجازه نمی‌دهند افزونه‌ها متن آن را تغییر دهند. یک محدودیت هم هست: بعضی وب‌اپلیکیشن‌ها بدون ترک صفحه بین بخش‌هایشان جابه‌جا می‌شوند، و در این حالت مرورگر فرصتی برای هشدار نمی‌دهد.

چرا ساختمش

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

چطور ساختمش

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

  • نقطه‌ی شروع، اولین کلید: لحظه‌ای که اولین کلید را در یک کادر می‌زنید، افزونه متنی را که آن کادر از قبل داشت به خاطر می‌سپارد، و از آن به بعد فقط تفاوت متن فعلی با همان نقطه‌ی شروع حساب می‌شود. برای تشخیص تایپ واقعی از رویداد beforeinput استفاده می‌شود و فقط نسخه‌ی «مورد اعتماد» آن پذیرفته می‌شود که از کاربر واقعی می‌آید؛ مقدارهایی که اسکریپت‌های سایت یا پر کردن خودکار مرورگر وارد می‌کنند این رویداد را ایجاد نمی‌کنند. تایپ، چسباندن و تایپ صوتی همه حساب می‌شوند.
  • شمردن فقط حروف اضافه‌شده: بخش مشترک ابتدا و انتهای متن قدیم و جدید کنار گذاشته می‌شود و فقط حروف غیرفاصله‌ی بخش تغییرکرده شمرده می‌شوند.
  • همه‌ی انواع کادر: کادرهای متنی معمولی، textarea و ویرایشگرهای پیشرفته (contenteditable) مثل ویرایشگر جیمیل؛ در ویرایشگرهای پیشرفته کل ویرایشگر یک کادر حساب می‌شود. کادرهایی که از صفحه حذف شده یا پنهان‌اند نادیده گرفته می‌شوند، و افزونه داخل iframeها هم کار می‌کند.
  • یک کد، سه مرورگر: کد مشترک یک بار نوشته شده و فقط فایل manifest برای هر مرورگر جداست: Manifest V3 برای کروم و اج و Manifest V2 برای فایرفاکس. یک اسکریپت ساخت، نسخه‌ی هر مرورگر را جداگانه بسته‌بندی می‌کند.
  • دسترسی حداقلی: تنها مجوز افزونه storage برای نگه داشتن تنظیمات است.

کد افزونه متن‌باز و با مجوز MIT منتشر شده است.


اگر سایتی پیدا کردید که افزونه در آن درست کار نمی‌کند، یا پیشنهادی برای بهتر شدنش دارید، با من در تماس باشید.