@gorhill gorhill released this Aug 1, 2016 · 2195 commits to master since this release


New cosmetic filtering operators: :has(), :xpath(), :style(). See detailed documentation at "Static filter syntax".

These new operators are to be used only for cosmetic filtering cases which are hard to crack -- more and more of these are surfacing (for example DOM elements with random class or id values).

When it comes to cosmetic filtering, preferably, always favor a plain old CSS3-based cosmetic filter, since they can be used in a declarative way, inside a style tag. But there are cases where no CSS3-based expression will work, and in such case consider these new :has and :xpath operators.

Note that unlike :has, :xpath is not a valid CSS4 expression, so they will always be enforced in a non-declarative way (in other word, javascript is doing the filtering, through document.evaluate).

These new cosmetic filtering operators can be "excepted" like any other standard CSS3-based cosmetic filter using the usual #@# prompt. Such exception cosmetic filters do not have to be specific however, i.e. you do not have to associate them to a specific hostname/entity.


The content script code responsible to implement cosmetic filtering has been re-factored:

  • To harden against sites which tries to work around uBO's cosmetic filtering.
  • To improve general performance and memory usage.
  • To support the new cosmetic filters.

Closed as fixed:


  • uMatrix's fix to issue #540 has been imported into uBO.



Assets 4