क्या आप उस बैनर से तंग आ गए हैं जो वेबसाइटों पर फैशनेबल बन गया है और आपसे तृतीय-पक्ष कुकीज़ स्वीकार करने या चेकआउट करने के लिए कह रहा है? इस पोस्ट में मैं समझाता हूं कि अधिकांश साइटों पर इससे बचने के लिए मैंने फ़ायरफ़ॉक्स एक्सटेंशन कैसे बनाया (और प्रकाशित किया)
इस एक्सटेंशन का कोड https://github.com/jagedn/removecookiewall-addon पर प्रकाशित किया गया है और आप इसे फ़ायरफ़ॉक्स में (मोबाइल पर भी) https://addons.mozilla.org/es/firefox/addon/removecookiewall/
से इंस्टॉल कर सकते हैं।कुछ महीनों के लिए, और एक यूरोपीय आवश्यकता के कारण (मुझे लगता है), अधिकांश वेबसाइटें आपको पहली बार एक्सेस करते समय एक बैनर दिखाती हैं जो आपको तब तक जारी रखने की अनुमति नहीं देती जब तक कि आप इनमें से कोई एक निर्णय न ले लें:
मैं आपके ब्राउज़र में हजारों तृतीय-पक्ष कुकीज़ रखने जा रहा हूं जो आपके ब्राउज़ करने पर जासूसी करेंगी
चेकआउट पर जाएं और मुझे ऐसा न करने के लिए भुगतान करें
इनमें से अधिकांश लाइब्रेरी पेज लोड होते ही जावास्क्रिप्ट निष्पादित करती हैं जो आपकी कुकीज़ को पढ़ता है। यदि वे देखते हैं कि आपने चेक आउट नहीं किया है, तो वे आपको एक HTML संवाद दिखाते हैं और शैली को "ब्लॉक" (या समान) में बदलकर मुख्य भाग को ब्लॉक कर देते हैं
यह संवाद आपको नीचे क्या है उसे पढ़ने नहीं देता लेकिन... यह अभी भी HTML का एक DOM तत्व है, इसलिए, चूंकि ब्राउज़र आपको एक डेवलपमेंट कंसोल खोलने और HTML का निरीक्षण करने की अनुमति देते हैं, इसलिए मेरे मन में यह विचार आया संवाद को मैन्युअल रूप से समाप्त करना (आप बस निरीक्षण पर क्लिक करें, HTML में देखें जहां इसे परिभाषित किया गया है और हटाएं पर क्लिक करें) और चिम्पोन, संवाद गायब हो जाता है। फिर मैं "बॉडी" घोषणा की तलाश करता हूं और स्टाइल विशेषता पर डबल क्लिक करके उस संपत्ति को हटा देता हूं जो इसे अवरुद्ध करती है और अब मैं स्क्रॉल कर सकता हूं।
छोटा जादू।
फिर क्या हो रहा है? ठीक है, जावास्क्रिप्ट कोड बस उपयोगकर्ता ईवेंट के आने का इंतजार करता रहता है जो उसे बताता है कि आपने कौन सा बटन दबाया है, लेकिन ये बटन अब वहां नहीं हैं, इसलिए यह कभी नहीं आएगा और यह तृतीय-पक्ष कुकीज़ स्थापित नहीं करेगा।
ठीक है, लेकिन अगर मैं पृष्ठ को ताज़ा कर दूं तो क्या होगा? खैर, फिर से शुरू करें... इसलिए यह मेरे लिए यह करने के लिए एक नए ब्राउज़र एक्सटेंशन के लिए बिल्कुल उपयुक्त है।
फ़ायरफ़ॉक्स एक्सटेंशन, संक्षेप में, एक आरक्षित ब्राउज़र मेमोरी स्पेस है जहां जावास्क्रिप्ट कोड निष्पादित होता है जो इसके साथ संवाद कर सकता है।
यह (यदि उपयोगकर्ता अनुमति देता है) आपके द्वारा देखे गए पृष्ठों में कोड इंजेक्ट कर सकता है, टैब खोल सकता है, उन्हें बंद कर सकता है, दूरस्थ सेवाओं के साथ संचार कर सकता है, ...
RemoveCookieWall एक फ़ायरफ़ॉक्स एक्सटेंशन है जिसकी "केवल" चीज़ ब्राउज़र के लिए उपयोगकर्ता द्वारा देखे जाने वाले सभी पेजों में एक छोटा जावास्क्रिप्ट कोड इंजेक्ट करना है।
यह जावास्क्रिप्ट, जैसे ही पेज लोड हुआ है, यह निरीक्षण करेगा कि क्या कोई DOM तत्व है जो मेरे द्वारा जांचे गए किसी भी तत्व से मेल खाता है जिसका वे उपयोग कर रहे हैं। यदि यह इसका पता लगाता है, तो इसे हटाने के लिए मानक जावास्क्रिप्ट फ़ंक्शन का उपयोग करेगा।
चूंकि हमारे कोड के निष्पादित होने के बाद कभी-कभी बैनर (मिली) सेकंड में दिखाई दे सकता है, स्क्रिप्ट कुछ सेकंड के लिए खोज को दोहराती है। इस समय के बाद, यदि बैनर दिखाई नहीं देता है, तो एक्सटेंशन यह मान लेता है कि पृष्ठ में कुकीवॉल नहीं है और समाप्त हो जाता है
और बस इतना ही। जो कुछ बचा है वह कोड को पैकेज करना है, एक मेनिफेस्ट फ़ाइल जोड़ना है जो हमारे एक्सटेंशन के लिए आवश्यक अनुमतियों को इंगित करता है और इसे फ़ायरफ़ॉक्स में प्रकाशित करता है
जेएस कोड मूल रूप से है:
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 इंगित करता है कि हम सभी पृष्ठों में जेएस इंजेक्ट करना चाहते हैं। अन्य एक्सटेंशन केवल एक साइट को इंगित कर सकते हैं, अन्य पृष्ठभूमि में जावास्क्रिप्ट निष्पादित करते हैं, ...
फ़ायरफ़ॉक्स में प्रकाशित करने के लिए हमें बस एक ज़िप प्रदान करना होगा जिसमें एक्सटेंशन के लिए आवश्यक सभी फ़ाइलें हों। इसे आसान बनाने के लिए मैंने एक build.sh बनाया है जो बस ज़िप चलाता है:
zip -r -FS ../remove-cookiewall.zip * --exclude '.git' --exclude 'build.sh'
फ़ायरफ़ॉक्स में एक्सटेंशन प्रकाशित करने में कोई जटिलता नहीं है और यह मुफ़्त है। केवल एक चीज यह है कि आपके एक्सटेंशन को प्रारंभिक समीक्षा पास करनी होगी जिसमें एक (या कई) दिन लग सकते हैं
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3