Вам надоел ставший модным на веб-сайтах баннер с просьбой принять сторонние файлы cookie или оформить заказ? В этом посте я объясняю, как я создал (и опубликовал) расширение Firefox, чтобы избежать его использования на большинстве сайтов
Код этого расширения опубликован по адресу https://github.com/jagedn/removecookiewall-addon. и вы можете установить его в Firefox (также на мобильном устройстве) по адресу https://addons.mozilla.org/es/firefox/addon/removecookiewall/
В течение нескольких месяцев, и из-за европейских требований (я думаю), большинство веб-сайтов показывают вам баннер при первом доступе к ним, который не позволяет вам продолжить, пока вы не решите между:
Я собираюсь разместить в вашем браузере тысячи сторонних файлов cookie, которые будут следить за тем, что вы просматриваете
подойди к кассе и заплати мне, чтобы я этого не делал
Большинство этих библиотек выполняют JavaScript сразу после загрузки страницы, считывающей ваши файлы cookie. Если они увидят, что вы не извлекли заказ, они покажут вам диалоговое окно HTML и заблокируют тело, изменив стиль на «блокировать» (или аналогичный)
Это диалоговое окно не позволяет вам читать то, что находится под ним, но... это все еще элемент DOM HTML, поэтому, поскольку браузеры позволяют вам открывать консоль разработки и проверять HTML, мне пришла в голову идея Удаление диалогового окна вручную (вы просто нажимаете «Проверить», смотрите в HTML, где он определен, и нажимаете «Удалить») и шимпон, диалоговое окно исчезает. Затем я ищу объявление «body» и, дважды щелкнув атрибут стиля, удаляю свойство, которое его блокирует, и теперь могу прокручивать.
Маленькое волшебство.
Что тогда происходит? Ну, код JavaScript просто продолжает ждать прибытия пользовательского события, сообщающего ему, какую кнопку вы нажали, но этих кнопок больше нет, поэтому он никогда не появится и не будет устанавливать сторонние файлы cookie.
Хорошо, но что, если я обновлю страницу? Что ж, начнём заново... так что новое расширение для браузера идеально подойдет для этого.
Коротко говоря, расширение Firefox — это зарезервированное пространство памяти браузера, в котором выполняется код JavaScript, который может взаимодействовать с ним.
Он может (если пользователь предоставляет разрешения) внедрять код в посещаемые вами страницы, открывать вкладки, закрывать их, взаимодействовать с удаленными службами,…
RemoveCookieWall — это расширение Firefox, «единственное» что ему нужно — это чтобы браузер встраивал небольшой код JavaScript во все страницы, которые посещает пользователь.
Этот javascript после загрузки страницы проверит, существует ли элемент DOM, соответствующий любому из исследованных мной элементов, которые они используют. Если он его обнаружит, он будет использовать стандартные функции Javascript для его удаления.
Поскольку баннер иногда может появиться через (милли)секунды после выполнения нашего кода, скрипт повторяет поиск в течение нескольких секунд. По истечении этого времени, если баннер не появился, расширение предполагает, что на странице нет CookieWall и завершает работу
И это все. Остается только упаковать код, добавить файл манифеста, в котором указаны разрешения, необходимые нашему расширению, и опубликовать его в 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 во все страницы. Другие расширения могут указывать только сайт, другие выполняют JavaScript в фоновом режиме, …
Для публикации в Firefox нам просто нужно предоставить zip-архив, содержащий все файлы, необходимые для расширения. Чтобы упростить задачу, я создал build.sh, который просто запускает zip:
zip -r -FS ../remove-cookiewall.zip * --exclude '.git' --exclude 'build.sh'
Публикация расширения в Firefox не представляет никаких сложностей и бесплатна. Единственное, ваше расширение должно пройти первоначальную проверку, которая может занять один (или несколько) дней
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3