מדיניות לגבי תבניות מותאמות אישית

המדיניות מיושמת בדף אינטרנט. כאשר מאגר מכיל פועל בדף, המדיניות חלה על הגדרות התבניות המותאמות אישית של Tag Manager כדי לשלוט באופן שבו ניתן להשתמש בתכונות ובפונקציונליות מסוימות. המדיניות מיושמת באמצעות ה-API של gtag('policy', ...).

ה-API של gtag('policy', ...) דורש הגדרות של dataLayer ו-gtag(). יש לוודא שהמאפיינים dataLayer ו-gtag() מוגדרים בקוד לפני ש-gtag('policy', ...) יופעל מאוחר יותר בסקריפט:

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

כדי להגדיר כללי מדיניות להרשאות של תבניות מותאמות אישית, צריך להשתמש ב-API של gtag('policy', ...) בדף אינטרנט:

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

הארגומנט השלישי - <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;
  }
});