Las extensiones dejan de romper su interfaz
Se acabaron los tickets de soporte cuando Consent-o-matic publica una actualización que rompe su banner. Las extensiones interactúan con metadatos estructurados, no con su DOM.
Los asistentes de consentimiento, los navegadores y los reguladores dependen todos de los datos que usted produce. navigator.consent es la API que hace su infraestructura de cumplimiento legible por máquinas, convirtiendo su CMP en la fuente de datos autoritativa en la que se apoya el ecosistema del consentimiento.
Los usuarios ven el banner. No ven lo que hay detrás: gestión de proveedores en múltiples jurisdicciones, registros de auditoría con validez legal, propagación del consentimiento en tiempo real a procesadores posteriores, experiencias multilingües que satisfacen el requisito de especificidad del GDPR.
La especificación propuesta navigator.consent hace visible este trabajo al resto del ecosistema. Sus declaraciones de proveedores se convierten en datos estructurados que los asistentes de consentimiento leen directamente. Su estado de consentimiento se vuelve auditable por diseño. El CMP se convierte en la fuente autoritativa en la que se apoya toda la cadena de consentimiento.
Hoy, los asistentes de consentimiento hacen ingeniería inversa de su DOM: scraping de botones, adivinando listas de proveedores, inyectando clics. Cada actualización de un CMP puede romper todas las extensiones. navigator.consent reemplaza este frágil scraping con una API estructurada: usted declara sus proveedores y finalidades, los asistentes leen los metadatos directamente.
1// Check which regulations apply2const { regulations, jurisdiction } =3 await navigator.consent.getRegulations();4// → { regulations: ["gdpr", "eprivacy"], jurisdiction: "FR", … }56// Register your consent interface7const { registrationId } =8 await navigator.consent.registerInterface({9 vendor: "My CMP",10 versionIdentifier: "2.4.1",11 regulation: regulations[0] ?? "gdpr",12 jurisdiction: jurisdiction ?? "EU",13 });1415// Declare processing purposes with their legal basis16await navigator.consent.registerPurposes([17 {18 id: "analytics",19 name: "Analytics",20 legalBasis: "legitimate_interest",21 },22 {23 id: "advertising",24 name: "Advertising",25 legalBasis: "consent",26 },27 {28 id: "functional",29 name: "Functional",30 legalBasis: "legitimate_interest",31 },32]);3334// Declare vendors and link them to purposes35await navigator.consent.registerVendors([36 {37 id: "google-analytics",38 name: "Google Analytics",39 domain: "analytics.google.com",40 privacyPolicyUrl: "https://…/privacy",41 purposeIds: ["analytics"],42 },43 {44 id: "hotjar",45 name: "Hotjar",46 domain: "hotjar.com",47 privacyPolicyUrl: "https://…/privacy",48 purposeIds: ["analytics", "advertising"],49 },50]);5152// Signal the assistant before showing your banner53// Empty scope = general prompt; the assistant gets54// a chance to apply user preferences first55const snap = await navigator.consent.requestConsent();5657// If preferences were applied, skip your UI58if (Object.values(snap.purposes).some(v => v !== "unset")) {59 applyConsent(snap);60} else {61 showConsentBanner();62}Se acabaron los tickets de soporte cuando Consent-o-matic publica una actualización que rompe su banner. Las extensiones interactúan con metadatos estructurados, no con su DOM.
Cuando un asistente de consentimiento gestiona el consentimiento a través de la API, su paquete completo de interfaz (JS, CSS, fuentes, imágenes) no necesita cargarse. A escala, esto es medible.
Cada mutación de preferencia se registra con procedencia y marcas de tiempo. La evidencia de cumplimiento está integrada en el protocolo, no añadida después.
Los asistentes de consentimiento dependen de sus declaraciones de proveedores y finalidades. El ecosistema lee de usted, no a su alrededor.
Una única integración de API reemplaza N soluciones específicas por extensión. Cada asistente de consentimiento actual y futuro utiliza el mismo canal.
No necesita mantener su propia geolocalización por IP para adivinar qué marco normativo aplica. El navegador proporciona el contexto regulatorio directamente a través de getRegulations(). Una pieza móvil menos que pueda poner en riesgo a sus clientes y a usted.
navigator.consent es una capa de transporte. No reemplaza sus responsabilidades legales, de cumplimiento o de experiencia de usuario.Usted presenta la información de consentimiento y recoge las elecciones a través de su propia interfaz. La API coordina, no impone una experiencia de usuario.
Usted sigue siendo el sistema de registro para las evidencias de consentimiento. La API añade un canal de coordinación, no un sustituto.
Usted define el alcance del consentimiento (origin, domain, eTLD+1) y la política de persistencia. El navegador no lo anula.
Modelo de registro abierto. Sin listas de permitidos, sin barreras de certificación, sin intermediarios entre usted y sus proveedores.
Todos estos métodos se ejecutan en contexto DOM. Los scripts en contexto de extensión no pueden invocarlos. El navegador aplica este límite.
registerInterface()Declare su interfaz de consentimiento para la página actual. Devuelve un registrationId para todas las operaciones posteriores.
registerVendors()Publique su catálogo de proveedores: nombre, dominio, URL de política de privacidad. Los asistentes de consentimiento leen esto en lugar de hacer scraping.
registerPurposes()Publique las finalidades de tratamiento, cada una con un id de forma libre y un nombre legible por humanos.
requestConsent()Señale al asistente antes de mostrar su interfaz de consentimiento. Con un scope vacío, señala un prompt general (banner de primera visita). Con IDs de proveedor o finalidad específicos, señala una necesidad contextual (por ejemplo, contenido incrustado bloqueado). En ambos casos, el asistente tiene la oportunidad de responder antes de que usted muestre su propia interfaz.
updatePreferences()Sincronice las preferencias ya recogidas o envíe actualizaciones del lado del CMP. Dispara un evento de actualización que los asistentes escuchan.
getRegulations()Devuelve el contexto regulatorio del navegador: normativas aplicables, jurisdicción y fuente de detección. Método compartido, disponible tanto en contexto DOM como de extensión.
La especificación completa de la API con tipos, métodos y comportamiento.
Definiciones de carga útil legibles por máquina para todos los tipos de la API.
Un polyfill funcional para experimentación local.