×Закрыть

Как отключить код, спрятанный в Shadow DOM?

Новые технологии «подарили» средство инкапсулирования кода в веб страницы — Shadow DOM. Некоторые хитрые разработчики придумали вставлять туда всякий хитрый код.

Самый безобидный — это реклама, которая не может быть заблокирована всякими расширениями-блокираторами из-за того, что пока нет селекторов для этого элемента. А названия div классов генерируются каждый раз новые.

Кто-нибудь знает решение этой проблемы? Возможно, уже есть готовое расширение, которое позволит если не удалить всё, что добавляется в #shadow-root , то хотя бы подменить на что-то безопасное.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Код в custom element спрятан ровно настолько, насколько он спрятан в любом классе в Реакте, даже меньше. Все описанное вами может быть сделано в любом фронтенд фреймворке.
Вы просто не ту проблему решаете.
Единственная причина, почему были выбраны Custom-elements:
Не нужна фронт-енд библиотека для работы этого элемента.

По теме:
const adElement = document.querySelector(’ad-element’);
adElement.adMethod = null;

Ну как-то так.

что еще за Shadow DOM? звучит как хреновая новость.

настолько shadow, что fiddler’ом не вылавливается?

Ну попробовать поиграться на предмет, что будет если:
— перезаписать в прототипе HTMLElement attachShadow до старта построения DOM, через document.write например, или каким нить плагином. Можно повесить заглушку или можно насильно задавать инкапсуляцию открытой, чтобы иметь потом возможность анализировать что там внутри с elem.shadowRoot.innerHTML или делать выборку селекторов.
— клонировать элементы, выкинув shadow dom

А как это на лету со стороны клиента можно делать? Есть готовые решения возможно?

Насчет готовых решений не знаю, но достаточно найти плагин, который позволяет юзеру при загрузке страницы, запускать код, вроде этого

      (function(attachShadow) {
          HTMLElement.prototype.attachShadow = function () {
              attachShadow.call(this, {mode: 'open'});
              this.shadowRoot.innerHTML = `<span style="font-size: 14px; color: white; background-color: red; padding: 5px">Shadow DOM Blocked</span>`;
          }
      })(HTMLElement.prototype.attachShadow)
По идее должно работать для пользовательских элементов, надеюсь, не трогая при этом нативные элементы типа контроллов или видео.
Ну или самому набросать манифест под экстеншн с «run_at»: «document_start»...

P.S. одмины, джва года жду нормальное форматирование тега code... ;)

P.S. одмины, джва года жду нормальное форматирование тега code... ;)

Pre...pre...prey.

Что-то мне подсказывает, некоторые разработчики браузеров являются рекламными площадками № 1 в мире. И закончится это предсказуемо: реклама умеет достать достаточно сильно, чтобы против неё воевали всем миром. Вплоть до того что выкинут Хром за 101й километр, как когда-то выкинули его конкурентов, если он не даст блочить рекламу порносайтов.

Понимаешь ли, у людей бывают дети. И большинство не готовы ставить малышам мультики про оранжевого дядю оранжевую тётю в оранжевую жо

Дивлюсь куди відправляється запит на отримання реклами і блокую конкретний сайт, якщо реклама блимає чи закриває контент

Або є варіант це оплатити підписку і дивитись Netflix чи Takflix

Є сайтів 15 якими активно користуюсь, а там де буваю рідко то можу вручну відключити через /etc/hosts, якщо реклама заважає

Ось таке ще часто згадують коли розповідають про ефективне блокування реклами
pi-hole.net

Проблема не только в рекламе. В теневой DOM теоретически можно спрятать всё что угодно, вплоть до майнеров.

Подписаться на комментарии