Políticas de plantillas personalizadas

Las políticas se implementan en páginas web. Cuando el código se ejecuta, las políticas se aplican a las definiciones de las plantillas personalizadas de Tag Manager para controlar cómo se pueden usar ciertas funciones. Estas políticas se implementan con la API gtag('policy', ...).

La API gtag('policy', ...) requiere definiciones de dataLayer y gtag(). Asegúrate de definir dataLayer y gtag() en el código antes de que gtag('policy', ...) se ejecute luego en la secuencia de comandos:

window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

Usa la API gtag('policy', ...) en una página web para configurar las políticas de los permisos de las plantillas personalizadas:

gtag('policy', <policy_type>, <function>)

El argumento <policy_type> puede ser cualquiera de los tipos de permisos admitidos, como inject_script. Se llamará a la política cada vez que un contenedor quiera verificar si se admite ese permiso.

gtag('policy', 'inject_script', ...)

Especifica 'all' para interactuar con todas las comprobaciones de las políticas.

gtag('policy', 'all', ...)

El tercer argumento, <function>, es una función que implementa la política indicada con esta firma:

function(container, policy, data){...}
  • container es el ID del contenedor de Tag Manager, como 'GTM-1234'.
  • policy es una cadena que especifica el tipo de política que se debe verificar.
  • data es un objeto que contiene toda la información pertinente al tipo de política indicado, como 'url' en el caso de un permiso 'send_pixel'.

Las funciones de políticas rechazan las solicitudes de permiso cuando devuelven el valor false o una excepción. Cuando el modo de vista previa está activado, las excepciones de tipo string y Error aparecerán en la sección Errores del panel de depuración. Cuando se registran varias comprobaciones de políticas, se llama a cada una de ellas. Todas pueden rechazar solicitudes de políticas.

En este ejemplo, se crea una política que comprueba el permiso 'inject_script':

gtag('policy', 'inject_script', function (container, policy, data) {

  // reference the url of the script to be injected
  let url = data.url || '';

  // if the url of the injected script exactly matches, allow it.
  // otherwise throw an error
  if (url === 'https://scripts.example.com/analytics.js') {
    return true;
  } else {
    throw 'Only permitted to inject https://scripts.example.com/analytics.js';
  }
});

En este ejemplo, se usa la palabra clave 'all' para comprobar varias situaciones respecto a las políticas:

gtag('policy', 'all', function(container, policy, data) {

  // Only set policy for 1 specific container.
  // This enables other containers loaded on the page to
  // operate without restrictions on permissions.
  if (container != 'GTM-4321') return true;

  // Since the policy is ‘all’, adjust permissions conditionally
  switch(policy) {

    case 'send_pixel':
      return true;

    case 'write_globals':
      return data.key && data.key == '_gaq';

    case 'inject_script':
      let url = data.url || '';
      if (url.indexOf('https://example.com') != 0)
        throw 'Only example.com scripts are permitted';

    default:
      // IT staff decides that all unknown permissions
      // are rejected.
      return false;
  }
});