นโยบายเทมเพลตที่กําหนดเอง

นํานโยบายไปใช้ในหน้าเว็บ เมื่อคอนเทนเนอร์ทํางานในหน้า จะมีการใช้นโยบายกับคําจํากัดความเทมเพลตที่กําหนดเองของ Tag Manager เพื่อควบคุมวิธีใช้ฟีเจอร์และฟังก์ชันบางอย่าง มีการใช้นโยบายกับ gtag('policy', ...) API

gtag('policy', ...) API ต้องการคําจํากัดความของ dataLayer และ gtag() ตรวจสอบว่า dataLayer และ gtag() ได้รับการกําหนดในโค้ดของคุณก่อนที่จะเรียกใช้ gtag('policy', ...) ในสคริปต์ต่อไปนี้

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

ใช้ gtag('policy', ...) API ในหน้าเว็บเพื่อกําหนดนโยบายสําหรับสิทธิ์ในเทมเพลตที่กําหนดเอง:

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

อาร์กิวเมนต์ <permissionId> เป็นสิทธิ์ประเภทใดประเภทหนึ่งที่รองรับ เช่น inject_script ระบบจะเรียกใช้นโยบายเมื่อใดก็ตามที่คอนเทนเนอร์ต้องการตรวจสอบว่าสิทธิ์นั้นได้รับอนุญาตหรือไม่

gtag('policy', 'inject_script', function(containerId, permissionId, data) {
  // Specific inject_script check goes here.
});

ระบุ 'all' เพื่อโต้ตอบกับการตรวจสอบนโยบายทั้งหมด

gtag('policy', 'all', function(containerId, permissionId, data) {
  // System-wide check goes here.
});

อาร์กิวเมนต์ที่ 3 คือ <function> เป็นฟังก์ชันที่ใช้นโยบายที่ระบุกับลายเซ็นนี้

function(containerId, permissionId, data) {...}
  • containerId คือรหัสคอนเทนเนอร์ของ Tag Manager เช่น 'GTM-1234'
  • permissionId คือสตริงที่ระบุประเภทนโยบายที่จะตรวจสอบ
  • data คือออบเจ็กต์ที่มีข้อมูลที่เกี่ยวข้องสําหรับประเภทสิทธิ์ที่ระบุ เช่น 'url' สําหรับสิทธิ์ 'send_pixel'

ฟังก์ชันนโยบายจะปฏิเสธคําขอสิทธิ์เมื่อแสดงผล false หรือมีการส่งข้อยกเว้น ข้อยกเว้นที่มีประเภท string หรือ Error จะปรากฏในส่วนข้อผิดพลาดของแผงแก้ไขข้อบกพร่องเมื่อโหมดแสดงตัวอย่างเปิดอยู่ เมื่อมีการลงทะเบียนการตรวจสอบนโยบายหลายรายการ จะมีการเรียกใช้การตรวจสอบแต่ละรายการและการตรวจสอบแต่ละรายการจะปฏิเสธคําขอนโยบายได้

ตัวอย่างนี้เป็นการสร้างนโยบายที่ตรวจสอบสิทธิ์ 'inject_script'

gtag('policy', 'inject_script', function(containerId, permissionId, 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';
  }
});

ตัวอย่างนี้ใช้คีย์เวิร์ด 'all' เพื่อตรวจสอบสถานการณ์นโยบายหลายรายการ

gtag('policy', 'all', function(containerId, permissionId, 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 (permissionId) {

    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;
  }
});