عن المشروع
js-fair-consent هو حل إدارة موافقات مفتوح المصدر مصمم للمواقع التي تريد احترام خصوصية الزوار مع الاستمرار في استخدام أدوات التحليلات والتسويق بشكل أخلاقي وقانوني.
توفر المكتبة شريط موافقة (قابل للتخصيص بالكامل عبر هيكل HTML وCSS) يطلب من الزوار الإذن قبل تحميل أي سكريبتات تحليلية. بمجرد منح الموافقة أو رفضها، يتم تحميل الخدمات المناسبة بشكل غير متزامن وغير عائق، تماشياً مع ممارسات أداء الويب الحديثة.
**مزودو التحليلات المدعومون**
- Google Analytics (عبر gtag.js)، مع دعم وضع الموافقة الإصدار الثاني (Consent Mode v2) بنوعي `consent-only` و`preload`
- Matomo، باستخدام واجهة برمجة التطبيقات الأصلية للموافقة (`requireConsent` و`rememberConsentGiven` و`forgetConsentGiven`)
- Umami، بوضع بدون تحميل مسبق لتجنب إعادة الرسم عند منح الموافقة لاحقاً
- Hotjar، يُحمَّل شرطياً فقط عند منح موافقة التسويق أو التخصيص
**الميزات الرئيسية**
- تحميل غير متزامن ومتأخر للسكريبتات بحيث لا يتوقف عرض الصفحة أبداً
- احترام إشارات التحكم العالمي في الخصوصية (GPC) وعدم التعقب (DNT) تلقائياً — عند اكتشاف أي منهما، يختفي الشريط وتبقى جميع الأدوات الاختيارية مُعطَّلة
- افتراضات الخصوصية بالتصميم: لا ملفات تعريف ارتباط حتى الموافقة الصريحة، سمات ملفات تعريف ارتباط آمنة (`SameSite=Lax` وHTTPS فقط)
- موافقة تفصيلية اختيارية: يمكن للزوار الموافقة أو رفض فئات فردية (تحليلات، تسويق، تخصيص) بدلاً من خيار واحد شامل
- آمن لسياسات أمن المحتوى (CSP): يدعم سمات `nonce` و`integrity` لإعدادات CSP الصارمة
- دعم متعدد اللغات مدمج: ترجمات بالإنجليزية والبولندية مرفقة افتراضياً، قابلة للتوسيع للغات أخرى
- جاهز CDN: يمكن توزيعه مباشرة عبر jsDelivr أو GitHub Pages
**التكوين**
تُهيّئ المكتبة عبر كائن JavaScript بسيط يُمرَّر إلى `ConsentAnalytics.init()`. يعلن المستخدمون عن الخدمات التي يريدون دعمها، ويوفّرون معرّفاتها (مثل معرّف قياس GA، ومعرّف موقع Umami، وعنوان URL ومعرّف موقع Matomo، ومعرّف مشروع Hotjar وإصداره)، ويضبطون خيارات مثل `debug` و`locale` وتحديد ما إذا كانت الموافقة التفصيلية مفعّلة. إذا فُعّلت الموافقة التفصيلية، تصبح ملفات تعريف الارتباط المخزّنة كائن JSON يربط كل فئة بحالة الموافقة، ويتحقق كل خدمة من قيمة الفئة ذات الصلة قبل التحميل.
**واجهة برمجة التطبيقات العامة**
تكشف المكتبة مجموعة صغيرة من الطرق للوصول البرمجي:
- `ConsentAnalytics.hasConsent()` — تُرجع قيمة boolean تدل على ما إذا تمت الموافقة
- `ConsentAnalytics.readPrefs()` — تُرجع كائن تفضيلات الموافقة الكامل
- `ConsentAnalytics.writePrefs(prefs)` — تحفظ حالة تفضيل جديدة
- `ConsentAnalytics.revokeConsent()` — تمحو الموافقة المخزّنة وتُظهر الشريط مرة أخرى
- `ConsentAnalytics.trackPageView()` — يُفعّل عرض صفحة يدوياً (مفيد لتطبيقات SPA)
المشروع مرخّص بموجب رخصة MIT وأنشأه رافال مياساريك (Rafał Masiarek).
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.