需要在網頁上執行政策。容器在網頁上執行時,系統會將政策套用至代碼管理工具的自訂範本定義,藉此控管特定功能的使用方式。政策會透過 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.
});
第三個引數 (<function>
) 會使用這個簽章實作指定政策:
function(containerId, permissionId, data) {...}
containerId
是代碼管理工具容器 ID (例如'GTM-1234'
。permissionId
是字串,用來指定要檢查的政策類型。data
是包含指定權限類型任何相關資訊的物件,例如擁有'send_pixel'
權限的'url'
。
當政策函式傳回 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;
}
});