Cómo escribir filtros para Adblock Plus

Las actuales versiones de Adblock Plus le permiten "ajustar" los filtros de distintas maneras. Este documento explica las opciones que usted tiene y cómo pueden ser utilizados los filtros.

Descargo de responsabilidad: Todos los ejemplos sobre filtros se dan aquí son realmente sólo ejemplos y no están diseñados para ser utilizados.

Introducción a los filtros para Adblock Plus

Las opciones descritas en esta sección deberían ser suficiente para los usuarios que tienen que crear un filtro de vez en cuando.

Reglas para filtros básicos

El filtro más trivial que se puede definir, por supuesto, es la dirección del aviso de publicidad que se desea bloquear. Sin embargo, a menudo esta dirección cambia cada vez que se abre una página. Por ejemplo, podría ser http://example.com/ads/banner123.gif 123 es un número al azar. Aquí el bloqueo de la dirección completa, no le ayuda, usted necesita un filtro más general — como ser http://example.com/ads/banner*.gif. O tal vez incluso http://example.com/ads/*.

Nota: Asegúrese de que usted no está reemplazando demasiado con comodines. El filtro http://example.com/* definitivamente bloqueará todos los banners, pero también se bloqueará todo lo demás de ejemplo.com que todavía puede ser que desee ver.

Definición de reglas de excepción

A veces, te darás cuenta de que uno de los filtros que por lo general funciona bastante bien, en algunos casos bloquea algo que no debería bloquear. Usted no desea eliminar este filtro, pero que tampoco desea que bloquee en este caso particular.

Para eso es lo que las reglas de excepción son buenas - permiten definir los casos en que los filtros no se deben aplicar. Por ejemplo, si usted no esta conforme con que su filtro adv bloquee http://example.com/advice.html, puede definir una regla de excepción @@advice. Las reglas de excepción no son diferentes de las reglas de filtrado, puede utilizar caracteres comodín o expresiones regulares. Sólo tiene que preceder por@@ para indicar una regla de excepción.

Las reglas de excepción pueden hacer más. Si una regla de excepción comienza con http:// o https: / / (opcionalmente con un ¦ antes) va a hacer una excepción para las páginas completa. Por ejemplo, si la regla de excepción es @@|http://example.com y abre alguna página de ejemplo.com - Adblock Plus será totalmente desactivado en esta página y nada se bloqueará.

Cómo coincidir el inicio / final de una dirección

Por lo general, Adblock Plus trata cada filtro como si hubiera un comodín en su principio y fin, por ejemplo, no hay diferencia entre los filtros ad y *ad*. Si bien esto por lo general no trae problemas, a veces es se desea que el filtro sólo coincida al principio o al final de una dirección. Por ejemplo es posible que desee bloquear todos los elementos Flash, pero si se agrega el filtro swf la dirección http://example.com/swf/index.html también será bloqueada.

Solución a este problema: añadir un símbolo de barra vertical (|) al filtro para mostrar que definitivamente el final de la dirección es en ese punto. Por ejemplo, el filtro swf| bloqueará http://example.com/annoyingflash.swf pero no http://example.com/swf/index.html. Y el filtro |http://baddomain.example/ bloqueará http://baddomain.example/banner.gif pero no http://gooddomain.example/analyze?http://baddomain.example.

A veces uno quiere bloquear http://example.com/banner.gif así como https://example.com/banner.gif y http://www.example.com/banner.gif Esto se puede lograr poniendo dos barras verticales en la parte delantera del filtro lo que hace que el filtro coincida al principio del nombre de dominio: ||example.com/banner.gif bloqueará todas estas direcciones, mientras que no bloqueará http://badexample.com/banner.gif o http://gooddomain.example/analyze?http://example.com/banner.gif (requiere Adblock Plus 1.1 o superior).

Marcado de caracteres separadores

A menudo es necesario utilizar un carácter separador en un filtro. Por ejemplo, puede escribir un filtro que bloquee http://example.com/ y http://example.com:8000/ pero no http://example.com.ar/. Aquí el símbolo ^ se puede utilizar como un marcador para un carácter separador individual: http://example.com^ (requiere Adblock Plus 1.1 o superior).

Un carácter separador es cualquier cosa menos una letra, un dígito, o uno de los siguientes: _ - . %. El final de la dirección también se acepta como separador. En el siguiente ejemplo todos los caracteres de separación se muestran en rojo: http://example.com:8000/foo.bar?a=12&b=%D1%82%D0%B5%D1%81%D1%82. Así que esta dirección se puede bloquear con el filtro ^example.com^ o ^%D1%82%D0%B5%D1%81%D1%82^ o ^foo.bar^.

Comentarios

Cualquier regla que comienza con un signo de exclamación se considera un comentario. Se mostrará en la lista de filtros, pero en color gris en lugar de negro. Adblock Plus ignora esta regla de bloqueo por lo que es seguro para escribir allí lo que quieras. Puedes colocar un comentario antes de un verdadero filtro para describir lo que está haciendo. O puedes poner un comentario en la parte superior de tu lista de filtros para indicar su autor (en general los autores de lista de filtros lo hacen).

Comentarios particulares

Los comentarios particulares solamente tendrán un efecto en las listas de filtro que han sido descargadas, y no en los filtros personalizados. Estos pueden crear un cierto número de parámetros en la lista de filtros:

Funciones avanzadas

Las características descritas en esta sección se utilizan generalmente sólo por los usuarios avanzados y creadores de listas de filtros. Puede saltear esta sección si no está interesado.

Cómo especificar opciones para filtros

Adblock Plus le permite especificar un número de opciones para modificar el comportamiento de un filtro. La lista de opciones se separada por comas después de un signo de dólar ($) al final del filtro, por ejemplo:

*/ads/*$script,match-case

Aquí */ads/* es el verdadero filtro y script y match-case son las opciones. En la actualidad las siguientes opciones son compatibles:

Utilización de expresiones regulares

Puede usar expresiones regulares para un mayor control sobre lo que sus filtros hagan coincidir. Por ejemplo, el filtro /banner\d+/ coincidirá con banner123 y banner321 pero no banners. Puedes consultar la documentación sobre las expresiones regulares para aprender cómo escribilos.

Nota: Por motivos de rendimiento, se recomienda no utilizar expresiones regulares si se puede evitar.

Ocultar elementos

Reglas básicas

A veces se encuentran anuncios de publicidad que no puede ser bloqueada debido a que están incrustadas como texto en la propia página web. Si nos fijamos en el código fuente de la página web, usted puede encontrar algo como esto:

<div class="textad">
Cheapest tofu, only here and now!
</div>
<div id="sponsorad">
Really cheap tofu, click here!
</div>
<textad>
Only here you get the best tofu!
</textad>

Usted necesita descargar la página web, por lo que necesariamente va a descargar los anuncios de publicidad. Lo único que es posible en este case es ocultar la publicidad para no tener que verla. Ésta es la función para la cual la ocultación de elementos se ha diseñado.

El primer anuncio (del ejemplo de arriba) se encuentra dentro de un elemento div con clase de atributo "textad". Esta regla oculta exactamente esta combinación: ##div.textad. Aquí ## marca una regla para ocultar el elemento, mientras que el resto es un selector para la identificación de los elementos que deben ser escondidos. Puede ocultar los elementos por su atributo id del mismo modo, ##div#sponsorad oculta el segundo anuncio de publicidad. No es necesario especificar el nombre del elemento, la regla ##*#sponsorad funcionará igual de bien. También puedes ocultar los elementos únicamente por su nombre de elemento, por ejemplo, ##textad para el tercer aviso de publicidad.

La extensión Element Hiding Helper ayuda a seleccionar el elemento correcto y la escritura de la regla correspondiente, sin tener que ver el código fuente de la página. Sin embargo es útil tener conocimientos básicos de HTML.

Nota: La ocultación de elementos funciona de manera muy diferente de los filtros normales. Esto tiene la implicación de que no se admitan los comodines en las reglas para ocultar elementos.

Cómo limitar las reglas a determinados dominios

Por lo general, se desea ocultar un anuncio específico en un sitio específico, y no se quiere que la regla que se aplique en otros sitios. Por ejemplo, la regla ##*.sponsor puede ocultar correctamente elementos en algunos sitios. Pero si se escribe como example.com##*.sponsor se va a aplicar en http://example.com/ y http://something.example.com/ pero no en http://example.org/. También puede especificar varios dominios - simplemente separarlos con comas: domain1.example,domain2.example,domain3.example##*.sponsor.

Si un nombre de dominio es precedido con "~", la regla no se aplicará en las páginas de este dominio (requiere Adblock Plus 1.1 o superior). Por ejemplo, ~example.com##*.sponsor aplicará en las páginas de cualquier dominio, pero "example.com" y example.com,~foo.example.com##*.sponsor hace que la regla se aplique en "example.com", con la excepción de el subdominio "foo.example.com ".

Nota: Debido a la forma como se implementa la ocultación de elementos, realmente sólo se puede limitar a los nombres de dominio completo. Usted no puede utilizar ninguna otra parte de la dirección y no se puede utilizar domain como un reemplazo para domain.example,domain.test.

Nota: Las reglas para ocultación de elementos con limitación de dominio también pueden ser utilizadas para ocultar los elementos de la interfaz de usuario del navegador. Por ejemplo, la regla de filtrado browser##menuitem#javascriptConsole oculta la consola de JavaScript en el menú de Herramientas de Firefox.

Selectores de atributos

Algunos anunciantes de publicidad no hacen que la tarea sea fácil - sus anuncios de texto no tienen ni un id ni un atributo de clase. Es posible utilizar otros atributos para ocultar los avisos de publicidad, por ejemplo ##table[width="80%"] oculta tablas con el atributo width (ancho) establecido en 80%. Si no desea especificar el valor total del atributo, ##div[title*="adv"] oculta todos los elementos div con atributo title (título) que contiene la cadena "adv". También puede consultar el principio y el final de un atributo, por ejemplo ##div[title^="adv"][title$="ert"] oculta elementos div con el título que comienza con "ADV" y termina con "ert ". Como puedes ver, también es posible utilizar varias condiciones — table[width="80%"][bgcolor="white"] coincide con las tablas con ancho del 80% y de atributos bgcolor en blanco.

Selectores avanzados

En general, cualquier selector CSS compatible con Firefox se puede utilizar para ocultar elementos. Por ejemplo, la siguiente regla oculta cualquier cosa tras un elemento div con clase "adheader": ##div.adheader + *. Para obtener una lista completa de la lista de CSS ver especificación CSS de W3C (Note que no todos los selectores son compatibles con Firefox todavía).

NotaEsta función es sólo para usuarios avanzados, usted debe sentirse cómodo con selectores CSS para utilizarlo. Adblock Plus no será capaz de verificar la sintaxis del selector que usted agregue. Si se utiliza una sintaxis inválida CSS, podrían dejar de funcionar otras reglas (válidas) que se hayan creado. Compruebe la consola de JavaScript para detectar los errores de CSS.

Reglas de excepción

Las reglas de excepción pueden desactivar en ciertos dominios las reglas establecidas. Están pensadas sobre todo para los autores de suscripciones de filtros que están ampliando otras suscripciones de filtros que no pueden modificar. Por ejemplo, se puede desactivar la regla ##div.textad en example.com usando la regla de excepción example.com#@#div.textad. La combinación de ambas reglas tiene exactamente el mismo efecto que la regla única ~example.com##div.textad. Se recomienda utilizar las reglas de excepción solamente cuando no se pueda modificar una regla general de ocultación de elementos, en todos los demás casos resulta preferible limitar dicha regla a los dominios en los que sea necesaria.

Sintaxis simplificada para ocultar elementos

Adblock Plus soporta sintaxis simplificada para ocultar elementos (por ejemplo, #div(id=foo)) solamente para la asegurar la compatibilidad hacia atrás. No se recomienda utilizar esta sintaxis, es preferible usar los selectores CSS. El soporte a esta sintaxis puede ser removido en algún momento.