هيكل التطبيق والتنقل
سكربتات المستخدم الذكية
سكربتات لكل موقع مع مطابقة الروابط والتوقيت (مثل Greasemonkey)
1ما هي Smart User Scripts؟#
Smart User Scripts هي سكربتات فردية لها أسماء - ولكل منها:
🌐 أنماط مطابقة الروابط (الصفحات التي يعمل عليها)
⏱ توقيت التشغيل (قبل التحميل أو أثناءه أو بعده)
✅ مفتاح التفعيل/التعطيل
تعمل مثل Greasemonkey أو Tampermonkey في متصفحات سطح المكتب - لكنها مدمجة مباشرة في تطبيقك.
✅ مثالي لـ:
- تسجيل دخول تلقائي في صفحة /login فقط
- أخفِ الإعلانات فقط في صفحات المقالات (https://news.com/article/*)
- راقب تغييرات DOM باستخدام MutationObserver
- احقن قبل عرض الصفحة (document-start) لتجنب الوميض
الفرق الرئيسي عن Quick Injection:
Quick Injection = نفس CSS/JS على جميع الصفحات
Smart User Scripts = تحكم لكل سكربت ولكل رابط ولكل توقيت
2أين تجدها#
الخطوة 4 (الأذونات) ← مرر للأسفل ← بطاقة 🤖 Smart User Scripts.
اضغط '+ إضافة' لإنشاء سكربت جديد. لكل سكربت:
- الاسم - يظهر في قائمة المدير
- أنماط مطابقة الروابط - واحد في كل سطر (يدعم رمز البدل *)
- Run At - document-end / document-start / document-idle
- الكود - JavaScript الخاص بك
- مفتاح التفعيل
اضغط على أي صف لتعديل السكربت أو حذفه.
3أمثلة على أنماط مطابقة الروابط#
تحدد الأنماط الصفحات التي يعمل عليها السكربت. استخدم * كرمز بدل:
# 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 ⚡ (متقدم)
يعمل قبل عرض الصفحة. يحقن السكربت في HTML الخام عبر shouldInterceptRequest. يزيل ترويسات CSP. استخدمه لـ CSS الوضع الداكن أو لفرض نافذة العرض قبل رسم التخطيط.
- document-idle ⏱
يعمل بعد 1.5 ثانية من تحميل الصفحة. مناسب لالتقاط محتوى AJAX المتأخر أو النوافذ التي تظهر بعد مهلة.
5مثال 1: تسجيل دخول تلقائي في /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: إخفاء جدران الدفع في صفحات المقالات#
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مثال 3: مراقبة المحتوى الديناميكي (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مثال 4: فرض الوضع الداكن قبل العرض (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مثال 5: تحليلات مخصصة / تتبع الأحداث#
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): لا يمكن لـ JS الوصول إلى إطارات iframe من مصادر أخرى (PayPal وStripe وتسجيل الدخول عبر Google). يفرض ذلك محرك المتصفح ولا يمكن تجاوزه.
📵 HTTPS فقط: واجهات مثل تحديد الموقع أو الكاميرا في السكربتات المحقونة تتطلب HTTPS.
✅ حماية من التشغيل المزدوج: كل سكربت محمي بعلامة على window ليعمل مرة واحدة فقط في كل صفحة.
✅ يعمل دون إنترنت: تعمل Smart User Scripts أيضًا في تطبيقات ZIP المضمّنة التي تعمل دون إنترنت.