ساخت APK رایگان

پوسته اپلیکیشن و ناوبری

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

اسکریپت برای هر سایت با تطبیق URL و زمان‌بندی (مثل Greasemonkey)

1Smart User Scripts چیست؟#

Smart User Scripts اسکریپت‌های جداگانهٔ نام‌دار هستند - هرکدام با این موارد:
🌐 الگوهای تطبیق URL (اجرا روی کدام صفحه‌ها)
⏱ زمان‌بندی اجرا (پیش از بارگذاری، حین آن یا پس از آن)
✅ کلید فعال/غیرفعال

مانند Greasemonkey یا Tampermonkey در مرورگرهای دسکتاپ کار می‌کنند - اما مستقیم در خود اپلیکیشن شما تعبیه شده‌اند.

✅ عالی برای:

  • ورود خودکار فقط در صفحه /login
  • پنهان کردن تبلیغات فقط در صفحه‌های مقاله (https://news.com/article/*)
  • پایش تغییرات DOM با MutationObserver
  • تزریق پیش از رندر صفحه (document-start) برای جلوگیری از سوسو

تفاوت اصلی با Quick Injection:
Quick Injection = همان CSS/JS روی همهٔ صفحه‌ها
Smart User Scripts = کنترل جداگانه برای هر اسکریپت، هر URL و هر زمان‌بندی

2کجا پیدایش کنیم#

مرحله ۴ (مجوزها) ← پایین بروید ← کارت 🤖 Smart User Scripts.

برای ساخت اسکریپت جدید روی «+ افزودن» بزنید. هر اسکریپت این موارد را دارد:

  • نام - در فهرست مدیریت نمایش داده می‌شود
  • الگوهای تطبیق URL - هر الگو در یک خط (از علامت * پشتیبانی می‌شود)
  • Run At - document-end / document-start / document-idle
  • Code - جاوااسکریپت شما
  • کلید فعال/غیرفعال

برای ویرایش یا حذف یک اسکریپت، روی ردیف آن بزنید.

3نمونه‌هایی از الگوهای تطبیق URL#

الگوها تعیین می‌کنند اسکریپت روی کدام صفحه‌ها اجرا شود. از * به‌عنوان علامت جایگزین (wildcard) استفاده کنید:

# Run on every page of every site
*://*/*

# Run only on example.com (any path)
https://example.com/*

# Run on ALL pages of ANY .com domain
https://*.com/*

# Run only on the /login path
https://example.com/login
https://example.com/login/*

# Run on news article pages
https://news.example.com/article/*

4توضیح زمان‌بندی اجرا (Run-At)#

  • document-end (پیش‌فرض)

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

  • document-start ⚡ (پیشرفته)

پیش از رندر شدن صفحه اجرا می‌شود. اسکریپت را از طریق shouldInterceptRequest در HTML خام تزریق می‌کند و سرآیندهای CSP را حذف می‌کند. برای CSS حالت تیره یا تنظیم viewport پیش از چیدمان صفحه استفاده کنید.

  • document-idle ⏱

۱٫۵ ثانیه پس از بارگذاری صفحه اجرا می‌شود. برای محتوای AJAX که دیر بارگذاری می‌شود یا پنجره‌هایی که با تأخیر ظاهر می‌شوند مناسب است.

5مثال ۱: ورود خودکار فقط در /login#

Match: https://myapp.com/login
Run-at: document-end

// Auto-fill login form
(function() {
  var email = document.querySelector('input[type=email], input[name=email]');
  var pass  = document.querySelector('input[type=password]');
  if (email) email.value = '[email protected]';
  if (pass)  pass.value  = 'mypassword';
  // Uncomment to auto-submit:
  // var form = document.querySelector('form');
  // if (form) form.submit();
})();

6مثال 2: پنهان کردن Paywall در صفحه‌های مقاله#

Match: https://news.site.com/article/*
Run-at: document-end

// Hide paywall overlay and restore scroll
(function() {
  var overlay = document.querySelector('.paywall-overlay, .metered-content, #paywall');
  if (overlay) overlay.remove();
  document.body.style.overflow = 'auto';
  document.documentElement.style.overflow = 'auto';
})();

7مثال ۳: پایش محتوای پویا (MutationObserver)#

Match: *://*/*
Run-at: document-end
برای عناصری که پس از بارگذاری صفحه ظاهر می‌شوند (پنجره‌ها و تبلیغات با بارگذاری تنبل):

// Remove any modal/popup that appears dynamically
(function() {
  var sel = '.modal, .popup, .overlay, [class*="modal"], [class*="popup"]';
  // Remove existing ones first
  document.querySelectorAll(sel).forEach(function(el) { el.remove(); });
  // Watch for new ones
  var obs = new MutationObserver(function() {
    document.querySelectorAll(sel).forEach(function(el) { el.remove(); });
  });
  obs.observe(document.body, { childList: true, subtree: true });
  // Stop watching after 30 s to save battery
  setTimeout(function() { obs.disconnect(); }, 30000);
})();

8مثال ۴: اجبار حالت تیره پیش از رندر (document-start)#

Match: *://*/*
Run-at: document-start
CSS را پیش از نمایش صفحه تزریق می‌کند - بدون سوسوی سفید:

// Inject dark theme before page renders
(function() {
  var s = document.createElement('style');
  s.id = '__force_dark__';
  s.textContent = [
    'html { filter: invert(1) hue-rotate(180deg) !important; }',
    'img,video,canvas,svg { filter: invert(1) hue-rotate(180deg) !important; }'
  ].join('\
');
  (document.head || document.documentElement).appendChild(s);
})();

9مثال ۵: آنالیتیکس / ردیابی رویداد سفارشی#

Match: https://myshop.com/*
Run-at: document-idle
رویدادهای سفارشی را پس از آرام گرفتن کامل صفحه ارسال کنید:

// Track page views + button clicks
(function() {
  // Page view
  console.log('[Analytics] Page: ' + location.href);

  // Track all CTA button clicks
  document.querySelectorAll('button, .btn, a[href]').forEach(function(el) {
    el.addEventListener('click', function() {
      console.log('[Analytics] Clicked: ' + (el.textContent || el.href));
      // Replace with your own tracker call, e.g. gtag('event', ...)
    });
  });
})();

10امنیت و محدودیت‌ها#

⚡ document-start سرآیندهای Content-Security-Policy را برای صفحهٔ منطبق حذف می‌کند. فقط روی سایت‌هایی استفاده کنید که مال خودتان است یا صراحتاً به آن‌ها اعتماد دارید.

🔒 Same-Origin Policy: جاوااسکریپت نمی‌تواند به iframeهای با مبدأ متفاوت (PayPal، Stripe، ورود با Google) دسترسی پیدا کند. این محدودیت را موتور مرورگر اعمال می‌کند و قابل دور زدن نیست.

📵 فقط HTTPS: APIهایی مانند geolocation یا دوربین در اسکریپت‌های تزریق‌شده به HTTPS نیاز دارند.

✅ جلوگیری از اجرای دوباره: هر اسکریپت با یک پرچم window محافظت می‌شود تا در هر صفحه فقط یک بار اجرا شود.

✅ آفلاین هم کار می‌کند: Smart User Scripts در اپلیکیشن‌های آفلاین بسته‌بندی‌شده با ZIP هم اجرا می‌شوند.

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

بررسی‌شده با راهنمای منتشرشده در 2026-10-22.