Preguntas frecuentes - Interioridades de Adblock Plus

¿Dónde puedo encontrar el significado de todas las preferencias de Adblock Plus?

Adblock Plus utiliza diferentes preferencias a las que puede acceder mediante about:config. Todas empiezan con extensions.adblockplus. (a diferencia de Adblock y Adblock Plus 0.5, que utilizan el prefijo adblock.). Puede consultar la lista completa con explicaciones aquí.

¿Cómo puedo acceder a Adblock Plus desde mi extensión?

Para posibilitar que otras extensiones se integren con Adblock Plus se ha exportado la interfaz IAdblockPlus . Consulte la documentación de la interfaz para más información.

¿Cómo bloquea direcciones Adblock Plus?

En realidad, Gecko (el motor interno de Firefox, Thunderbird y otras aplicaciones) hace la mayor parte del trabajo, al permitir lo que se denominan "políticas de contenidos". Una política de contenidos es un objeto JavaScript (o C++) al que se llama cada vez que el navegador tiene que cargar algo. Entonces puede mirar la dirección a cargar y otros datos más, y decidir si se permite o no. Existen varias políticas de contenidos predeterminadas (cuando usted define a qué sitios no se les permite cargar imágenes en Firefox o Seamonkey, está configurando unas de esas políticas predeterminadas), y cualquier extensión puede registrar la suya. Así que Adblock Plus sólo tiene que registrar su política de contenidos, y entonces sólo falta una lógica aplicada que decida que direcciones bloquear y una interfaz de usuario que permita configurar los filtros.

Para desarrolladores: para registrar una política de contenidos hay que escribir un componente XPCOM que a su vez implemente la interfaz nsIContentPolicy. Asegúrese de ajustar el método registerSelf del módulo para registrar su componente en la categoría "content-policy" (utilice el administrador de categorías). De este modo se llamará al método shouldLoad de su componente y usted podrá decidir si esa petición específica debe aceptarse o rechazarse.

¿Cómo procesa sus filtros Adblock Plus, y cuáles son más rápidos?

Todos los filtros se convierten internamente en expresiones regulares, incluso los que no están especificados como tales. Por ejemplo, el filtro ad*banner.gif| se convertirá en la expresión regular /ad.*banner\.gif$/. Sin embargo, cuando se le da una dirección a Adblock Plus para que la compare con los filtros no se limita a probarlos todos uno tras otro, pues eso ralentizaría innecesariamente el navegador.

Además de convertir los filtros en expresiones regulares, Adblock Plus intenta extraer de ellos información textual. Lo que necesita una única cadena de 8 caracteres (un "atajo") que debe estar presente en cualquier dirección que coincida con el filtro (esa longitud es arbitraria, sencillamente ocho caracteres parecía una cantidad razonable). Por ejemplo, si usted tiene un filtro como |http://ad.*, Adblock Plus tiene que elegir entre "http://a", "ttp://ad" y "tp://ad."; cualquiera de esas cadenas estará siempre presente en cualquier filtro que coincida con la dirección. Lo malo es que no se puede encontrar una atajo para filtros que no tengan ocho caracteres que no estén separados por comodines, o que ya hayan sido especificados como expresiones regulares.

Todos los atajos se incluyen en una table de consulta, de modo que Adblock Plus puede encontrar de forma muy eficiente el filtro mediante su atajo. Cuando Adblock Plus tiene que probar una dirección concreta primero mira los atajos conocidos (esto se hará muy rápidamente, pues el tiempo necesario es casi independiente del número de atajos). Sólo cuando se encuentra un atajo se procede a comprobar la cadena de texto con la expresión regular del filtro correspondiente. Sin embargo, los filtros que no tienen atajo tienen que probarse uno a uno, lo que resulta lento.

En resumen: ¿qué filtros deben usarse para que la lista de filtros sea más rápida? Debe intentar usar el menor número de expresiones regulares posible, pues siempre serán lentas. También debe asegurarse de que los filtros simples tienen al menos ocho caracteres de texto sin interrupciones (es decir, sin contener caracteres especiales como *), pues en caso contrario el filtro será tan lento como una expresión regular. Pero con filtros que cumplan esa regla no importará cuántos tenga, el tiempo de procesamiento será siempre el mismo. Eso significa que si necesita 20 filtros simples para reemplazar una expresión regular, vale la pena hacerlo. Y ya que mencionamos el tema, es muy recomendable utilizar el deregifier (aplicación que deshace las expresiones regulares).

Explicación detallada del algoritmo de comprobación de filtros.

¿Cómo funciona la ocultación de elementos?

Las reglas de ocultación de elementos se convierten en reglas CSS y se aplican a todas las páginas web que visite el usuario. Una regla como example.com#div(evil_ad) se convertiría en:

@-moz-document domain(example.com)
{
  div#evil_ad, div.evil_ad
  {
    display: none !important;
  }
}

@-moz-document es una extensión propuesta para el estándar CSS, puede obtener más información sobre el asunto en el Mozilla Developer Center.

Las reglas que no están limitadas a un dominio determinado se limitarán a los protocolos http:// y https:// para evitar que se oculten elementos de la interfaz de usuario (que usa el esquema de protocolo chrome://). Por ejemplo, la regla #div(evil_ad) se convertirá en:

@-moz-document url-prefix(http://),url-prefix(https://)
{
  div#evil_ad, div.evil_ad
  {
    display: none !important;
  }
}

Para desarrolladores: Adblock Plus utiliza para ello el servicio de hojas de estilo. Esta interfaz, que se incluyó con Gecko 1.8, permite que las extensiones añadan dinámicamente hojas de estilo de usuario (anteriormente sólo se podía modificar userContent.css, lo que requería reiniciar el navegador). Las hojas de estilo de usuario tienen preferencia sobre el código CSS de cualquier página web, puesto que tienen la máxima prioridad CSS.

¿Qué aspecto debe tener la primera línea del archivo de filtros?

Normalmente la primera línea de un archivo de filtros es sencillamente [Adblock]. Pero quizás haya notado que en las últimas versiones de Adblock Plus a veces se pone en su lugar un texto diferente. Esto ocurre cuando tiene en su lista filtros que usan la sintaxis avanzada de filtros que soportan las versiones más modernas de Adblock Plus, pero no el Adblock original. Un ejemplo sería:

(Adblock Plus 0.6.1.2 or higher required) [Adblock]

Esto es sólo un comentario. Adblock (y Adblock Plus por ese mismo motivo) ignorará todo antes del marcador real. La versión mínima de Adblock Plus exigida no se impone porque Adblock Plus 0.6.1.2 no la soportaba. Sin embargo, si usted usa una sintaxis de filtros más moderna podría tener algo como esto:

[Adblock Plus 0.7.1]

Este tipo de encabezamiento está soportado a partir de Adblock Plus 0.7.1. Las versiones anteriores de Adblock Plus y Adblock no pueden abrir archivos con ese encabezamiento. Las versiones actuales comprobarán el número de versión del cabecero y lo compararán con su número de versión. Si el archivo exige una versión más moderna de Adblock Plus se le mostrará un mensaje al usuario pidiéndole que actualice. Las suscripciones seguirán cargando archivos diseñados para versiones más modernas de Adblock Plus pero mostrarán un aviso en la ventana de preferencias.

Por último, si quiere exigir que se use Adblock Plus pero no quiere especificar el número de versión puede iniciar el archivo con [Adblock Plus]. Por supuesto que este archivo sólo será aceptado por Adblock Plus 0.7.1 y las versiones posteriores.