uBlock - скрыть любой элемент, который содержит текст с данным словом?
Можно ли написать собственное правило фильтра, чтобы любой div
, span
или же p
и его дочерние элементы скрыты, когда в текстовой части есть определенное слово, т.е. Trump
?
Например, у меня есть эта структура
<div>
<a class="..." href="...">Donald Trump said blablabla.</a>
</div>
Я пробовал это, но это не имеет никакого эффекта:
##div>a:has-text(Trump)
3 ответа
:has-text()
процедурный косметический фильтр . Они «всегда должны быть конкретными, т.е. иметь префикс имени хоста сайта(ов), на котором они предназначены для применения».
Процедурные косметические фильтры являются мощными инструментами, но их следует избегать, если это возможно, так как они могут замедлить загрузку сайта (приходится вставлять JavaScript и посещать множество узлов).
Если вы все еще хотите этого, это должно выглядеть так:
example.com,domain.com,anotherexample.com##div>a:has-text(Trump)
Вы можете изменить это поведение , чтобы использовать неспецифический процедурный косметический фильтр, например##div>a:has-text(Trump)
будет работать, но это категорически не рекомендуется . Это замедлит работу вашего браузера на каждой странице, и существует вероятность того, что ошибки во внешних списках фильтров станут самопроизвольными и приведут к множеству ложных срабатываний/переблокировок.
Вы можете найти эту опцию скрытой в
- Панель управления uBO
- Настройки
- Отметьте «Я продвинутый пользователь»
- Прочтите и поймите предупреждения
- Нажмите на шестеренки
- Измените «allowGenericProceduralFilters» на
true
- Нажмите «Применить изменения»
ps: косая черта типа:has-text(/Target words/)
не нужны . Если вы их используете, выражение внутри будет оцениваться как RegEx , что вызовет еще большую рабочую нагрузку.
Похоже на то has-text
Селектор работает только тогда, когда указан домен верхнего уровня. Так, например, работает следующее, но только на сайте Guardian:
theguardian.com##.fc-item__container:has-text(Trump)