هل سئمت من اللافتة التي أصبحت رائجة على مواقع الويب التي تطلب منك قبول ملفات تعريف الارتباط أو الخروج من طرف ثالث؟ أشرح في هذا المنشور كيف قمت بإنشاء (ونشر) امتداد لمتصفح فايرفوكس لتجنبه في معظم المواقع
تم نشر الكود الخاص بهذا الامتداد على https://github.com/jagedn/removecookiewall-addon ويمكنك تثبيته في Firefox (على الهاتف المحمول أيضًا) من https://addons.mozilla.org/es/firefox/addon/removecookiewall/
لبضعة أشهر، وبسبب المتطلبات الأوروبية (على ما أظن)، تعرض لك معظم مواقع الويب لافتة عند دخولك إليها لأول مرة ولا تسمح لك بالمتابعة حتى تقرر بين:
سأقوم بوضع الآلاف من ملفات تعريف الارتباط التابعة لجهات خارجية في متصفحك والتي ستتجسس على ما تتصفحه
اذهب إلى صفحة الدفع وادفع لي حتى لا أفعل ذلك
تقوم معظم هذه المكتبات بتنفيذ جافا سكريبت بمجرد تحميل الصفحة التي تقرأ ملفات تعريف الارتباط الخاصة بك. إذا رأوا أنك لم تقم بالسحب، فسيعرضون لك مربع حوار HTML ويحظرون النص عن طريق تغيير النمط إلى "حظر" (أو ما شابه)
لا يتيح لك مربع الحوار هذا قراءة ما هو موجود بالأسفل ولكنه... لا يزال أحد عناصر DOM في HTML، لذا، بما أن المتصفحات تسمح لك بفتح وحدة تحكم التطوير وفحص HTML، خطرت لي فكرة حذف مربع الحوار يدويًا (ما عليك سوى النقر فوق فحص، والبحث في HTML حيث تم تعريفه والنقر فوق حذف) وشمبانزي، يختفي مربع الحوار. ثم أبحث عن إعلان "النص" ومن خلال النقر المزدوج على سمة النمط أقوم بإزالة الخاصية التي تمنعه ويمكنني الآن التمرير.
القليل من السحر.
ماذا يحدث إذن؟ حسنًا، يستمر كود جافا سكريبت في انتظار وصول حدث المستخدم لإخباره بالزر الذي ضغطت عليه، ولكن هذه الأزرار لم تعد موجودة، لذلك لن تصل أبدًا ولن تقوم بتثبيت ملفات تعريف ارتباط الطرف الثالث.
حسنًا، ولكن ماذا لو قمت بتحديث الصفحة؟ حسنًا، ابدأ من جديد... لذلك يعد هذا مثاليًا لملحق متصفح جديد للقيام بذلك نيابةً عني.
باختصار، امتداد فايرفوكس هو مساحة ذاكرة محجوزة للمتصفح حيث يتم تنفيذ تعليمات برمجية جافا سكريبت التي يمكن الحوار معها.
يمكنه (إذا منح المستخدم الأذونات) إدخال التعليمات البرمجية في الصفحات التي تزورها، وفتح علامات التبويب، وإغلاقها، والتواصل مع الخدمات عن بعد، …
RemoveCookieWall هو امتداد لمتصفح فايرفوكس والشيء "الوحيد" الذي يحتاجه هو أن يقوم المتصفح بإدخال كود جافا سكريبت صغير في جميع الصفحات التي يزورها المستخدم.
سوف يقوم جافا سكريبت هذا، عند تحميل الصفحة، بفحص ما إذا كان هناك عنصر DOM يطابق أيًا من العناصر التي قمت بالتحقق من أنهم يستخدمونها. إذا اكتشفه، فسوف يستخدم وظائف Javascript القياسية لحذفه.
نظرًا لأن اللافتة يمكن أن تظهر أحيانًا (مللي) ثانية بعد تنفيذ التعليمات البرمجية الخاصة بنا، فإن ما يفعله البرنامج النصي هو تكرار البحث لبضع ثوانٍ. بعد هذا الوقت، إذا لم يظهر الشعار، يفترض الامتداد أن الصفحة لا تحتوي على CookieeWall وينتهي
وهذا كل شيء. كل ما تبقى هو حزم التعليمات البرمجية وإضافة ملف البيان الذي يشير إلى الأذونات التي يتطلبها ملحقنا ونشره في Firefox
رمز JS هو في الأساس:
var readyStateCheckInterval; var counter = 0; function sanitizeBody() { document.body.style.overflow = "unset" document.body.classList.remove('sxnlzit') document.body.classList.remove('didomi-popup-open') document.body.parentNode.classList.remove('sp-message-open') } function removeMe(element) { element.remove(); sanitizeBody(); } readyStateCheckInterval = setInterval(function() { if (document.readyState === "complete") { counter ; const removeParent = ['div.pmConsentWall']; //elpais [...removeParent].forEach(s => { var divs = document.body.querySelectorAll(s); [...divs].forEach(element => { removeMe(element.parentNode); }); }); const removeThis = [ 'div[data-nosnippet="data-nosnippet"]', '#mrf-popup', '#didomi-popup', '[id^="sp_message_container_"]', '#cl-consent', 'dialog.cookie-policy' ]; [...removeThis].forEach(s => { var divs = document.body.querySelectorAll(s); [...divs].forEach(element => { removeMe(element); }); }); if (counter > 30) { clearInterval(readyStateCheckInterval); } } }, 100);
بمجرد إدخال الكود في الصفحة، يبدأ الفاصل الزمني كل 100 مللي
يبحث البرنامج النصي عما إذا كان document.body.querySelectorAll قد عثر على أي عنصر مثل #mrf-popup، #didomi-popup، وما إلى ذلك. إذا عثر عليه، فما عليك سوى إزالته باستخدام element.remove()
بعد عدة محاولات ينتهي الأمر بحذف الفاصل الزمني
يجب أن يكون لكل ملحق ملف بيان. الخاص بهذا الامتداد هو ببساطة:
{ "description": "Remove CookieWall", "manifest_version": 2, "name": "RemoveCookieWall", "version": "0.11", "homepage_url": "https://github.com/jagedn/removecookiewall-addon", "icons": { "48": "icons/border-48.png" }, "content_scripts": [{ "matches": [ "*://*/*" ], "js": ["removeCookieWall.js"] }], "browser_specific_settings": { "gecko": { "id": "[email protected]" } } }
كما ترى، يشير content_scripts إلى أننا نريد إدخال js في جميع الصفحات. يمكن أن تشير الإضافات الأخرى إلى موقع فقط، بينما تقوم الإضافات الأخرى بتنفيذ جافا سكريبت في الخلفية، …
للنشر في Firefox، يتعين علينا ببساطة توفير ملف مضغوط يحتوي على جميع الملفات التي يتطلبها الامتداد. لتسهيل الأمر، قمت بإنشاء build.sh الذي يقوم ببساطة بتشغيل الملف المضغوط:
zip -r -FS ../remove-cookiewall.zip * --exclude '.git' --exclude 'build.sh'
نشر الامتداد في Firefox ليس له أي تعقيدات وهو مجاني. الشيء الوحيد الذي يجب أن يجتازه ملحقك هو اجتياز المراجعة الأولية التي قد تستغرق يومًا واحدًا (أو عدة)
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3