核心 API
這些 API 可搭配採用沙箱機制的 JavaScript,在 Google Tag Manager 中建立自訂範本。每個 API 都會加上 require()
陳述式,例如:
const myAPI = require('myAPI');
addConsentListener
註冊事件監聽器函式,以便在指定同意類型的狀態變更時執行。
每當指定同意聲明類型的狀態從拒絕變更為授予,或從授予變更為拒絕時,系統就會叫用指定的監聽器。系統會將沒有狀態的同意聲明類型視為已授予,因此如果未設定的同意聲明類型更新為已授予,系統就不會呼叫事件監聽器。事件監聽器函式會負責確保程式碼執行的次數正確無誤。
範例:
const isConsentGranted = require('isConsentGranted');
const addConsentListener = require('addConsentListener');
if (!isConsentGranted('ad_storage')) {
let wasCalled = false;
addConsentListener('ad_storage', (consentType, granted) => {
if (wasCalled) return;
wasCalled = true;
const cookies = getMyCookies();
sendFullPixel(cookies);
});
}
語法
addConsentListener(consentType, listener)
參數
參數 | 類型 | 說明 |
---|---|---|
consentType |
string | 要監聽狀態變更的同意聲明類型。 |
listener |
function | 在指定同意聲明類型的狀態變更時執行的函式。 |
叫用監聽器時,系統會將要變更的同意聲明類型和該同意聲明類型的新值傳遞給監聽器:
參數 | 類型 | 說明 |
---|---|---|
consentType |
string | 要變更的同意聲明類型。 |
granted |
布林值 | 如果指定的同意聲明類型變更為已授予,則為 true。 |
相關權限
access_consent
權限,具有同意類型的讀取權限。
addEventCallback
addEventCallback
API 可讓您註冊回呼函式,以便在事件結束時叫用。當事件的所有代碼已執行,或達到網頁內事件逾時時,系統就會叫用回呼。回呼會傳遞兩個值:叫用函式的容器 ID,以及包含事件相關資訊的物件。
語法
addEventCallback(callback)
參數
參數 | 類型 | 說明 |
---|---|---|
callback |
function | 在事件結束時要叫用的函式。 |
eventData
物件包含下列資料:
鍵名 | 類型 | 說明 |
---|---|---|
tags |
陣列 | 標記資料物件的陣列。在事件期間觸發的每個代碼都會在這個陣列中顯示一個項目。代碼資料物件包含代碼的 ID (id )、執行狀態 (status ) 和執行時間 (executionTime )。代碼資料也會包含在代碼上設定的其他代碼中繼資料。 |
範例
addEventCallback(function(ctid, eventData) {
logToConsole('Tag count for container ' + ctid + ': ' + eventData['tags'].length);
});
相關權限
aliasInWindow
aliasInWindow
API 可讓您建立別名 (例如 window.foo =
window.bar
),以便支援需要別名的特定代碼。將 fromPath
中 window
物件中的值,指派給 toPath
中 window
物件中的鍵。如果成功,則傳回 true
,否則傳回 false
。
語法
aliasInWindow(toPath, fromPath)
參數
參數 | 類型 | 說明 |
---|---|---|
toPath |
string | 以點號分隔的路徑,指向應複製值的 window 物件。路徑中所有元件 (包括最後一個元件) 都必須已存在於 window 物件中。 |
fromPath |
string | 以點號分隔的路徑,指向 window 中要複製的值。如果不存在,作業就會失敗。 |
範例
aliasInWindow('foo.bar', 'baz.qux')
相關權限
toPath
和 fromPath
都需要 access_globals
;toPath
需要寫入權限,fromPath
需要讀取權限。
callInWindow
允許您以受政策控管的方式,從 window
物件以外的路徑呼叫函式。使用指定的引數,在 window
的指定路徑上呼叫函式,並傳回值。如果傳回類型無法直接對應至沙箱 JavaScript 支援的類型,系統會傳回 undefined
。沙箱 JavaScript 支援的八種類型為 null
、undefined
、boolean
、number
、string
、Array
、Object
和 function
。如果指定的路徑不存在,或未參照函式,系統會傳回 undefined
。
語法
callInWindow(pathToFunction, argument [, argument2,... argumentN])
參數
參數 | 類型 | 說明 |
---|---|---|
pathToFunction |
string | 以點號分隔的路徑,指向要呼叫的 window 函式。 |
args |
* | 要傳遞至函式的引數。 |
相關權限
已啟用 execute
權限的 access_globals
。
callLater
安排函式呼叫以非同步方式發生。在目前程式碼傳回後,系統會呼叫此函式。這相當於 setTimeout(<function>, 0)
。
語法
callLater(function)
參數
參數 | 類型 | 說明 |
---|---|---|
function |
function | 要呼叫的函式。 |
copyFromDataLayer
傳回目前指派至資料層中指定鍵的值:如果指定鍵的值為基本類型、函式或物件常值,則傳回該值;否則傳回 undefined
。
語法
copyFromDataLayer(key[, dataLayerVersion])
參數
參數 | 類型 | 說明 |
---|---|---|
key |
string | 以「a.b.c」格式顯示的鍵。 |
dataLayerVersion |
number | 選用的資料層版本。預設值為 2。強烈建議您不要使用值 1。 |
相關權限
copyFromWindow
從 window
物件複製變數。如果 window
中的值無法直接對應至沙箱 JavaScript 支援的類型,系統會傳回 undefined
。沙箱 JavaScript 支援的八種類型為 null
、undefined
、boolean
、number
、string
、Array
、Object
和 function
。傳回擷取 (並轉換) 的值。
語法
copyFromWindow(key)
參數
參數 | 類型 | 說明 |
---|---|---|
key |
string | 要複製值的 window 中鍵。 |
相關權限
createArgumentsQueue
建立佇列,並填入引數物件,以支援需要標記解決方案的情況。
使用 fnKey
引數 (與 createQueue
相同的語意),在全域範圍 (即 window
) 中建立函式。建立函式後,這個 API 會使用 arrayKey
引數,在 window
中建立陣列 (如果尚未存在)。
呼叫 fnKey
下建立的函式時,該函式會將其引數物件推送至 arrayKey
下建立的陣列。API 的傳回值是 fnKey
下建立的函式。
這個函式需要在 access_globals
權限中,為 fnKey
和 arrayKey
設定讀取和寫入權限。
範例:
const gtag = createArgumentsQueue('gtag', 'dataLayer');
gtag('set', {'currency': 'USD'});
語法
createArgumentsQueue(fnKey, arrayKey)
參數
參數 | 類型 | 說明 |
---|---|---|
fnKey |
string | 函式設定所在的 window 路徑 (如果尚未存在)。這個引數支援標準的點號符號。如果索引鍵的路徑不存在,系統會擲回例外狀況。也就是說,如果 fnKey 是 'one.two' ,就會擲回例外狀況。 |
arrayKey |
string | window 中設定陣列的路徑 (如果尚未存在)。這個引數支援標準的點號符號。如果索引鍵的路徑不存在,系統會擲回例外狀況。也就是說,如果 arrayKey 是 'one.two' ,且沒有名為 'one' 的全域物件,系統就會擲回例外狀況。 |
相關權限
createQueue
在 window
中建立陣列 (如果不存在),並傳回會將值推送至該陣列的函式。
這個函式需要 access_globals
權限的 arrayKey
讀取和寫入設定。
範例:
const dataLayerPush = createQueue('dataLayer');
dataLayerPush({'currency': 'USD'}, {'event': 'myConversion'});
語法
createQueue(arrayKey)
參數
參數 | 類型 | 說明 |
---|---|---|
arrayKey |
string | window 中設定陣列的鍵 (如果尚未存在)。這個引數支援標準的點號符號。如果索引鍵的路徑不存在,系統會擲回例外狀況。舉例來說,如果 arrayKey 是 'one.two' ,但沒有名為 'one' 的全域物件,系統就會擲回例外狀況。 |
相關權限
decodeUri
解碼提供 URI 中的任何已編碼字元。傳回代表已解碼 URI 的字串。如果提供無效的輸入內容,則傳回 undefined
。
範例:
const decode = require('decodeUri');
const decodedUrl = decode(data.encodedUrl);
if (decodedUrl) {
// ...
}
語法
decodeUri(encoded_uri)
參數
參數 | 類型 | 說明 |
---|---|---|
encoded_uri |
string | 由 encodeUri() 或其他方法編碼的 URI。 |
相關權限
無。
decodeUriComponent
解碼提供的 URI 元件中的任何已編碼字元。傳回代表已解碼 URI 元件的字串。在提供無效輸入值時,會傳回 undefined
。
範例:
const decode = require('decodeUriComponent');
const decodedUrl = decode(data.encodedUrl);
if (decodedUrl) {
// ...
}
語法
decodeUriComponent(encoded_uri_component)
參數
參數 | 類型 | 說明 |
---|---|---|
encoded_uri_component |
string | 已透過 encodeUriComponent() 或其他方式編碼的 URI 元件。 |
相關權限
無。
encodeUri
透過轉義特殊字元,傳回已編碼的統一資源 ID (URI)。傳回代表已編碼為 URI 的提供字串的字串。如果提供無效的輸入內容 (單一代理字),則會傳回 undefined
。
範例:
sendPixel('https://www.example.com/' + encodeUri(pathInput));
語法
encodeUri(uri)
參數
參數 | 類型 | 說明 |
---|---|---|
uri |
string | 完整的 URI。 |
相關權限
無。
encodeUriComponent
透過轉義特殊字元,傳回已編碼的統一資源 ID (URI)。傳回代表已編碼為 URI 的提供字串的字串。如果提供無效的輸入內容 (單一代理字),則會傳回 undefined
。
範例:
sendPixel('https://www.example.com/?' + encodeUriComponent(queryInput));
語法
encodeUriComponent(str)
參數
參數 | 類型 | 說明 |
---|---|---|
str |
string | URI 的元件。 |
相關權限
無。
fromBase64
fromBase64
API 可讓您從 base64 表示法解碼字串。如果提供無效的輸入內容,就會傳回 undefined
。
語法
fromBase64(base64EncodedString)
參數
參數 | 類型 | 說明 |
---|---|---|
base64EncodedString |
string | Base64 編碼字串。 |
範例
const fromBase64 = require('fromBase64');
const greeting = fromBase64('aGVsbG8=');
if (greeting === 'hello') {
// ...
}
相關權限
無
generateRandom
傳回指定範圍內的隨機數字 (整數)。
語法
generateRandom(min, max)
參數
參數 | 類型 | 說明 |
---|---|---|
min |
number | 傳回整數的最小可能值。 |
max |
number | 傳回整數的最大可能值。 |
相關權限
無。
getContainerVersion
傳回包含目前容器資料的物件。傳回的物件包含下列欄位:
{
containerId: string,
debugMode: boolean,
environmentName: string,
environmentMode: boolean,
previewMode: boolean,
version: string,
}
範例
const getContainerVersion = require('getContainerVersion');
const sendPixel = require('sendPixel');
if (query('read_container_data')) {
const cv = getContainerVersion();
const pixelUrl = 'https://pixel.com/' +
'?version=' + cv.version +
'&envName=' + cv.environmentName +
'&ctid=' + cv.containerId +
'&debugMode=' + cv.debugMode +
'&previewMode=' + cv.previewMode;
if (query('send_pixel', pixelUrl)) {
sendPixel(pixelUrl);
}
}
語法
getContainerVersion();
相關權限
getCookieValues
傳回所有名稱為指定名稱的 Cookie 值。
語法
getCookieValues(name[, decode])
參數
參數 | 類型 | 說明 |
---|---|---|
name |
string | Cookie 的名稱。 |
decode |
布林值 | 控制是否要使用 JavaScript 的
decodeURIComponent() 解碼 Cookie 值。預設值為 true 。 |
相關權限
getQueryParameters
傳回目前網址 queryKey
的第一個或所有參數。傳回 queryKey
的第一個值,或 queryKey
的值陣列。
語法
getQueryParameters(queryKey[, retrieveAll])
參數
參數 | 類型 | 說明 |
---|---|---|
queryKey |
string | 從查詢參數讀取的鍵。 |
retrieveAll |
布林值 | 是否要擷取所有值。 |
舉例來說,如果目前的網址為 https://example.com/path?var=foo&var1=foo1&var=foo2&var=foo
,則:
getQueryParameters('var') == 'foo'
getQueryParameters('var', false) == 'foo'
getQueryParameters('var', null) == 'foo'
getQueryParameters('var', true) == ['foo', 'foo2', 'foo']
相關權限
get_url
必須允許 query
元件,並且必須在允許的查詢鍵中指定 queryKey
(或允許任何查詢鍵)。
getReferrerQueryParameters
getReferrerQueryParameters
API 的運作方式與 getQueryParameters
相同,但會作用於參照網址,而非目前網址。傳回指定參照來源 queryKey
的第一個或所有參數。傳回 queryKey
的第一個值,或 queryKey
的值陣列。
語法
getReferrerQueryParameters(queryKey[, retrieveAll])
參數
參數 | 類型 | 說明 |
---|---|---|
queryKey |
string | 從查詢參數讀取的鍵。 |
retrieveAll |
布林值 | 是否要擷取所有值。 |
舉例來說,如果參照網址為 https://example.com/path?var=foo&var1=foo1&var=foo2&var=foo
,則:
getReferrerQueryParameters('var') == 'foo'
getReferrerQueryParameters('var', false) == 'foo'
getReferrerQueryParameters('var', null) == 'foo'
getReferrerQueryParameters('var', true) == ['foo', 'foo2', 'foo']
相關權限
get_referrer
必須允許 query
元件,並且必須在允許的查詢鍵中指定 queryKey
(或允許任何查詢鍵)。
getReferrerUrl
在指定元件類型後,API 會讀取參照來源的文件物件,並傳回代表參照來源的字串。如未指定元件,系統會傳回完整的參照網址。
語法
getReferrerUrl([component])
參數
參數 | 類型 | 說明 |
---|---|---|
component |
string | 從網址傳回的元件。可以是下列其中一個值:protocol 、host 、port 、path 、query 、extension 。如果 component 是 undefined 、null ,或是不符合其中一個元件,系統會傳回整個網址。 |
相關權限
get_referrer
必須允許 query
元件,並且必須在允許的查詢鍵中指定 queryKey
(或允許任何查詢鍵)。
getTimestamp
已淘汰。建議使用 getTimestampMillis。
傳回數字,代表自 Unix 紀元起至今的當前時間 (以毫秒為單位),如 Date.now()
所傳回。
語法
getTimestamp();
相關權限
無。
getTimestampMillis
傳回數字,代表自 Unix 紀元起至今的當前時間 (以毫秒為單位),如 Date.now()
所傳回。
語法
getTimestampMillis();
相關權限
無。
getType
傳回描述指定值類型的字串。與 typeof
不同,getType
會區分 array
和 object
。
語法
getType(data.someField)
注意事項
下表列出每個輸入值所傳回的字串。
輸入值 | 結果 |
---|---|
undefined |
'undefined' |
null |
'null' |
true |
'boolean' |
12 |
'number' |
'string' |
'string' |
{ a: 3 } |
'object' |
[ 1, 3 ] |
'array' |
(x) => x + 1 |
'function' |
相關權限
無。
getUrl
傳回字串,代表目前網址的全部或部分內容,並提供元件類型和一些設定參數。
語法
getUrl(component)
參數
參數 | 類型 | 說明 |
---|---|---|
component |
string | 從網址傳回的元件。必須是下列其中一個值:protocol 、host 、port 、path 、query 、extension 、fragment 。如果元件是 undefined 、null ,或不符合上述任一元件,系統會傳回整個 href 值。 |
相關權限
gtagSet
將 gtag 設定指令推送至資料層,以便在目前事件和該事件觸發的任何代碼完成處理 (或達到代碼處理逾時) 後,盡快處理。系統會保證在資料層佇列中的任何已排隊項目之前,先在這個容器中處理更新。
舉例來說,如果代碼是在同意聲明初始化時觸發,則更新會在初始化事件處理前套用。例如 ads_data_redaction
設為 true
或 false
,或是 url_passthrough
設為 true
或 false
。
例如:
const gtagSet = require('gtagSet');
gtagSet({
'ads_data_redaction': true,
'url_passthrough': true,
});
語法
gtagSet(object)
參數
參數 | 類型 | 說明 |
---|---|---|
Object |
物體 | 用於更新所含屬性全域狀態的物件。 |
相關權限
write_data_layer
會檢查所有指定鍵的寫入權限,以便將資料寫入 dataLayer
。如果 gtagSet
的輸入內容是一般物件,API 會檢查該物件內所有扁平鍵的寫入權限,例如 gtagSet({foo: {bar: 'baz'}})
,API 會檢查 foo.bar
的寫入權限。
如果 gtagSet
的輸入內容是鍵和一些非純物件值,API 會檢查該鍵的寫入權限,例如 gtagSet('abc', true)
,API 會檢查 'abc'
的寫入權限。
請注意,如果輸入物件中有循環,系統只會檢查到達相同物件之前的鍵。
injectHiddenIframe
在頁面中加入隱藏式 iframe。
回呼會以函式例項的形式提供,並在呼叫回呼的 JavaScript 函式中包裝。
語法
injectHiddenIframe(url, onSuccess)
參數
參數 | 類型 | 說明 |
---|---|---|
url |
string | 要用於 iframe 的 src 屬性值的網址。 |
onSuccess |
function | 在成功載入影格時呼叫。 |
相關權限
injectScript
在網頁中加入指令碼標記,以非同步方式載入指定網址。回呼會以函式例項的形式提供,並在呼叫這些函式的 JavaScript 函式中包裝。
語法
injectScript(url, onSuccess, onFailure[, cacheToken])
參數
參數 | 類型 | 說明 |
---|---|---|
url |
string | 要插入的指令碼位址。 |
onSuccess |
function | 成功載入指令碼時會呼叫。 |
onFailure |
function | 當指令碼載入失敗時呼叫。 |
cacheToken |
string | 用於指出應快取的網址 (選用)。如果指定這個值,系統只會建立一個指令碼元素來要求 JavaScript。任何其他載入嘗試都會導致指定的 onSuccess 和 onFailure 方法排入佇列,直到指令碼載入為止。 |
相關權限
isConsentGranted
如果已授予指定的同意聲明類型,則傳回「是」。
如果同意聲明類型已設為「已授予」或未設為任何值,系統就會視為您已授予特定同意聲明類型的同意聲明。如果同意聲明類型設為任何其他值,系統會視為未取得同意。
代碼管理工具的代碼設定使用者介面會提供一項選項,可讓您選擇一律啟動。如果已啟用「一律觸發」的代碼使用這個 API,系統會視為已授予同意聲明,並傳回 true
,無論實際同意聲明狀態為何。
範例:
const isConsentGranted = require('isConsentGranted');
if (isConsentGranted('ad_storage')) {
sendFullPixel();
} else {
sendPixelWithoutCookies();
}
語法
isConsentGranted(consentType)
參數
參數 | 類型 | 說明 |
---|---|---|
consentType |
string | 要檢查狀態的同意聲明類型。 |
相關權限
access_consent
權限,具有同意類型的讀取權限。
JSON
傳回提供 JSON 函式的物件。
parse()
函式會解析 JSON 字串,以建構字串所描述的值或物件。如果無法剖析值 (例如格式錯誤的 JSON),函式會傳回 undefined
。如果輸入值不是字串,系統會將輸入值強制轉換為字串。
stringify()
函式會將輸入內容轉換為 JSON 字串。如果無法剖析值 (例如物件有循環),方法會傳回 undefined
。
語法
JSON.parse(stringInput)
JSON.stringify(value);
參數
JSON.parse
參數 | 類型 | 說明 |
---|---|---|
stringInput | any | 要轉換的值。如果值不是字串,輸入內容會強制轉換為字串。 |
JSON.stringify
參數 | 類型 | 說明 |
---|---|---|
值 | any | 要轉換的值。 |
範例
const JSON = require('JSON');
// The JSON input string is converted to an object.
const object = JSON.parse('{"foo":"bar"}');
// The input object is converted to a JSON string.
const str = JSON.stringify({foo: 'bar'});
localStorage
傳回具有存取本機儲存空間方法的物件。
語法
const localStorage = require('localStorage');
// Requires read access for the key. Returns null if the key does not exist.
localStorage.getItem(key);
// Requires write access for the key. Returns true if successful.
localStorage.setItem(key, value);
// Requires write access for the key.
localStorage.removeItem(key);
相關權限
範例
const localStorage = require('localStorage');
if (localStorage) {
const value = localStorage.getItem('my_key');
if (value) {
const success = localStorage.setItem('my_key', 'new_value');
if (success) {
localStorage.removeItem('my_key');
}
}
}
logToConsole
將引數記錄到瀏覽器控制台。
語法
logToConsole(obj1 [, obj2,... objN])
參數
參數 | 類型 | 說明 |
---|---|---|
obj1 [, obj2,... objN] |
any | 引數 |
相關權限
makeInteger
將指定值轉換為數字 (整數)。
語法
makeInteger(value)
參數
參數 | 類型 | 說明 |
---|---|---|
value |
any | 要轉換的值。 |
相關權限
無。
makeNumber
將指定值轉換為數字。
語法
makeNumber(value)
參數
參數 | 類型 | 說明 |
---|---|---|
value |
any | 要轉換的值。 |
相關權限
無。
makeString
以字串形式傳回指定值。
語法
makeString(value)
參數
參數 | 類型 | 說明 |
---|---|---|
value |
any | 要轉換的值。 |
相關權限
無。
makeTableMap
將含有兩個資料欄的簡易表格物件轉換為 Map
。這可用於將包含兩個欄的 SIMPLE_TABLE
範本欄位變更為更易於管理的格式。
例如,這個函式可以轉換資料表物件:
[
{'key': 'k1', 'value': 'v1'},
{'key': 'k2', 'value': 'v2'}
]
至地圖:
{
'k1': 'v1',
'k2': 'v2'
}
傳回 Object:如果已將鍵/值組合新增至該物件,則傳回已轉換的 Map
;否則傳回 null
。
語法
makeTableMap(tableObj, keyColumnName, valueColumnName)
參數
參數 | 類型 | 說明 |
---|---|---|
tableObj |
清單 | 要轉換的資料表物件。這是一組對應表,其中每個 Map 代表資料表中的一列。資料列物件中的每個屬性名稱都是資料欄名稱,而屬性值則是資料列中的資料欄值。 |
keyColumnName |
string | 資料欄名稱,其值會成為轉換後的 Map 中的鍵。 |
valueColumnName |
string | 資料欄名稱,其值會成為轉換後的 Map 值。 |
相關權限
無。
Math
提供 Math
函式的物件。
語法
const Math = require('Math');
// Retrieve the absolute value.
const absolute = Math.abs(-3);
// Round the input down to the nearest integer.
const roundedDown = Math.floor(3.6);
// Round the input up to the nearest integer.
const roundedUp = Math.ceil(2.2);
// Round the input to the nearest integer.
const rounded = Math.round(3.1);
// Return the largest argument.
const biggest = Math.max(1, 3);
// Return the smallest argument.
const smallest = Math.min(3, 5);
// Return the first argument raised to the power of the second argument.
const powerful = Math.pow(3, 1);
// Return the square root of the argument.
const unsquared = Math.sqrt(9);
參數
數學函式參數會轉換為數字。
相關權限
無。
Object
傳回提供 Object
方法的物件。
keys()
方法提供標準程式庫 Object.keys() 行為。它會以 for...in...
迴圈的相同順序,傳回指定物件本身可枚舉的屬性名稱陣列。如果輸入值不是物件,系統會將其強制轉換為物件。
values()
方法提供標準程式庫 Object.values() 行為。它會以 for...in...
迴圈的相同順序,傳回指定物件本身可枚舉的屬性值陣列。如果輸入值不是物件,系統會將其強制轉換為物件。
entries()
方法提供標準程式庫 Object.entries() 行為。它會以 for...in...
迴圈的相同順序,傳回指定物件本身可枚舉屬性 [key, value]
組合的陣列。如果輸入值不是物件,系統會將其強制轉換為物件。
freeze()
方法提供標準程式庫 Object.freeze() 行為。已凍結的物件無法再變更;凍結物件後,系統就會防止新屬性新增至該物件、移除現有屬性,以及變更現有屬性的值。freeze()
會傳回傳入的相同物件。系統會將原始或空值引數視為已凍結的物件,並傳回該物件。
delete()
方法會提供標準程式庫的刪除運算子行為。除非物件已凍結,否則會從物件中移除指定鍵。與標準程式庫刪除運算子一樣,如果第一個輸入值 (objectInput
) 是未凍結的物件,即使第二個輸入值 (keyToDelete
) 指定不存在的鍵,也會傳回 true
。在所有其他情況下,它會傳回 false
。不過,它與標準程式庫刪除運算子的差異如下:
keyToDelete
不能是指定巢狀鍵的以點號分隔的字串。delete()
無法用於從陣列中移除元素。delete()
無法用於從全域範圍移除任何屬性。
語法
Object.keys(objectInput)
Object.values(objectInput)
Object.entries(objectInput)
Object.freeze(objectInput)
Object.delete(objectInput, keyToDelete)
參數
Object.keys
參數 | 類型 | 說明 |
---|---|---|
objectInput | any | 要列舉其鍵的物件。如果輸入內容不是物件,系統會將其強制轉換為物件。 |
Object.values
參數 | 類型 | 說明 |
---|---|---|
objectInput | any | 要列舉值的物件。如果輸入內容不是物件,系統會將其強制轉換為物件。 |
Object.entries
參數 | 類型 | 說明 |
---|---|---|
objectInput | any | 要列舉鍵/值組合的物件。如果輸入內容不是物件,系統會將其強制轉換為物件。 |
Object.freeze
參數 | 類型 | 說明 |
---|---|---|
objectInput | any | 要凍結的物件。如果輸入內容不是物件,系統會將其視為已凍結的物件。 |
Object.delete
參數 | 類型 | 說明 |
---|---|---|
objectInput | any | 要刪除鍵值的物件。 |
keyToDelete | string | 要刪除的頂層鍵。 |
範例
const Object = require('Object');
// The keys of an object are enumerated in an array.
const keys = Object.keys({foo: 'bar'});
// The values of an object are enumerated in an array.
const values = Object.values({foo: 'bar'});
// The key/value pairs of an object are enumerated in an array.
const entries = Object.entries({foo: 'bar'});
// The input object is frozen.
const frozen = Object.freeze({foo: 'bar'});
// The key is removed from the input object.
const obj1 = {deleteme: 'value'};
Object.delete(obj1, 'deleteme');
// Only a top-level key can be specified as the key to delete.
const obj2 = {nested: {key: 'value'}};
Object.delete(obj2, 'nested.key'); // This has no effect.
Object.delete(obj2.nested, 'key'); // This deletes the nested key.
parseUrl
傳回包含所有指定網址元件的物件,類似於 URL
物件。
此 API 會針對任何格式錯誤的網址傳回 undefined
。如果網址格式正確,網址字串中未出現的欄位值會是空字串,或是 searchParams
的情況下,為空物件。
傳回的物件將包含下列欄位:
{
href: string,
origin: string,
protocol: string,
username: string,
password: string,
host: string,
hostname: string,
port: string,
pathname: string,
search: string,
searchParams: Object<string, (string|Array)>,
hash: string,
}
範例
const parseUrl = require('parseUrl');
const urlObject = parseUrl('https://abc:xyz@example.com:8080/foo?param=val%2Cue#bar');
語法
parseUrl(url);
參數
參數 | 類型 | 說明 |
---|---|---|
url |
string | 要剖析的完整網址。 |
相關權限
無。
queryPermission
查詢允許和縮小範圍的權限。傳回 布林值:如果已授予權限,則為 true
;否則為 false
。
語法
queryPermission(permission, functionArgs*)
參數
參數 | 類型 | 說明 |
---|---|---|
permission |
string | 權限名稱。 |
functionArgs |
any | 函式引數會因要查詢的權限而異。請參閱下方的函式引數。 |
函式引數
sendPixel
、injectScript
、injectHiddenIframe
:第二個參數應為網址字串。
writeGlobals
、readGlobals
:第二個參數應為要寫入或讀取的鍵。
readUrl
:無須額外引數即可查詢是否可讀取整個網址。如要查詢是否可以讀取特定元件,請將元件名稱做為第二個引數傳遞:
if (queryPermission('readUrl','port')) {
// read the port
}
如要檢查特定查詢鍵是否可讀,請將查詢鍵做為第三個參數傳遞:
if (queryPermission('readUrl','query','key')) {
getUrlComponent(...);
}
相關權限
無。
readCharacterSet
傳回 document.characterSet
的值。
語法
readCharacterSet()
參數
無。
相關權限
readTitle
傳回 document.title
的值。
語法
readTitle()
參數
無。
相關權限
require
依名稱匯入內建函式。傳回可從程式呼叫的函式或物件。如果瀏覽器不支援內建函式,則會傳回 undefined。
語法
require(name)
參數
參數 | 類型 | 說明 |
---|---|---|
name |
string | 要匯入的函式名稱。 |
範例
const getUrl = require('getUrl');
const url = getUrl();
相關權限
無。
sendPixel
向指定網址端點發出 GET 要求。
語法
sendPixel(url, onSuccess, onFailure)
參數
參數 | 類型 | 說明 |
---|---|---|
url |
string | 像素的傳送位置。 |
onSuccess |
function | 當像素成功載入時會呼叫。注意:即使要求已成功傳送,瀏覽器可能仍需要有效的圖片回應,才能執行 onSuccess。 |
onFailure |
function | 當像素無法載入時會呼叫。注意:即使要求成功傳送,如果伺服器未傳回有效的圖片回應,onFailure 可能會執行。 |
相關權限
setCookie
設定或刪除具有指定名稱、值和選項的 Cookie。
語法
setCookie(name, value[, options, encode])
參數
參數 | 類型 | 說明 |
---|---|---|
name |
string | Cookie 的名稱。 |
value |
string | Cookie 的值。 |
options |
物體 | 指定 Domain、Path、Expires、Max-Age、Secure 和 SameSite 屬性。(請參閱下方的「選項」)。 |
encode |
布林值 | 控制是否要使用 JavaScript 的 encodeURIComponent() 編碼 Cookie 值。預設值為 true 。 |
- 網域:由
options['domain']
屬性設定 (如有)。將這個值設為'auto'
,即可根據文件位置,嘗試使用盡可能廣泛的網域寫入 Cookie。如果失敗,就會依序嘗試較狹小的子網域。如果所有這些都失敗,則會嘗試在沒有網域的情況下寫入 Cookie。如果未設定任何值,系統會嘗試在未指定網域的情況下寫入 Cookie。注意:當未指定網域的 Cookie 寫入document.cookie
時,使用者代理程式會將 Cookie 的網域預設為目前文件位置的主機。 - Path:由
options['path']
設定 (如有)。當未指定路徑的 Cookie 寫入document.cookie
時,使用者代理程式會將 Cookie 的路徑預設為目前文件位置的路徑。 - Max-Age:由
options['max-age']
設定 (如有)。 - 到期日:由
options['expires']
設定 (如有)。如果提供此屬性,則必須採用世界標準時間格式的日期字串。Date.toUTCString()
可用於為此參數格式化Date
。 - Secure:由
options['secure']
設定 (如有)。 - SameSite:由
options['samesite']
設定 (如有)。
相關權限
setDefaultConsentState
將預設同意聲明更新內容推送至資料層,在目前事件和該事件觸發的任何代碼處理完畢 (或達到代碼處理逾時) 後,盡快進行處理。系統會保證在資料層中任何已排入佇列的項目之前,先在這個容器中處理更新。進一步瞭解同意聲明。
範例:
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'ad_storage': 'denied',
'analytics_storage': 'granted',
'third_party_storage': 'denied',
'region': ['US-CA'],
'wait_for_update': 500
});
語法
setDefaultConsentState(consentSettings)
參數
參數 | 類型 | 說明 |
---|---|---|
consentSettings |
物體 | 定義指定同意聲明類型的預設狀態的物件。 |
consentSettings
物件是任意同意聲明類型字串與 'granted'
或 'denied'
的對應項目。支援下列值:
鍵名 | 類型 | 說明 |
---|---|---|
consentType |
string | 每個同意類型的值都可以設為 `"granted" (已同意) 或 `"denied" (拒絕)。除了 `"granted" (已同意) 以外的任何值都會視為 `"denied" (拒絕)。將值設為 `undefined` 不會對其先前的值造成任何影響。 |
region |
陣列 | 可選的區域代碼陣列,指定同意聲明設定適用的區域。區域代碼會以 ISO 3166-2 格式,表示國家/地區和/或子區域。 |
wait_for_update |
number | 指定毫秒值,用於控制資料傳送前等待的時間長度。與非同步載入的同意聲明工具搭配使用。 |
相關權限
access_consent
權限,可對 consentSettings 物件中的所有同意類型提供寫入存取權。
setInWindow
在指定索引鍵的 window
中設定指定值。根據預設,如果 window
中已有值,這個方法就不會設定值。將 overrideExisting
設為 true
,即可在 window
中設定值,無論是否有現有值皆可。傳回 布林值:如果值設定成功,則為 true
;否則為 false
。
語法
setInWindow(key, value, overrideExisting)
參數
參數 | 類型 | 說明 |
---|---|---|
key |
string | window 中的索引鍵,用於放置值。 |
value |
* | 在 window 中設定的值。 |
overrideExisting |
布林值 | 此標記表示應在 window 中設定值,無論是否有值都一樣。 |
相關權限
sha256
計算輸入內容的 SHA-256 摘要,並以 Base64 編碼的摘要叫用回呼,除非 options
物件指定不同的輸出編碼。
範例:
sha256('inputString', (digest) => {
sendPixel('https://example.com/collect?id=' + digest);
data.gtmOnSuccess();
}, data.gtmOnFailure);
sha256('inputString', (digest) => {
sendPixel('https://example.com/collect?id=' + digest);
data.gtmOnSuccess();
}, data.gtmOnFailure, {outputEncoding: 'hex'});
語法
sha256(input, onSuccess, onFailure = undefined, options = undefined)
參數
參數 | 類型 | 說明 |
---|---|---|
input |
string | 要計算雜湊值的字串。 |
onSuccess |
function | 除非 options 物件指定不同的輸出編碼,否則會以 Base64 編碼的結果摘要呼叫。 |
onFailure |
function | 如果在計算摘要時發生錯誤,或是瀏覽器未原生支援 sha256,就會呼叫此方法。回呼會使用包含錯誤名稱和訊息的物件呼叫。 |
options |
物體 | 選用選項物件,用於指定輸出編碼。如果指定了這個值,物件應包含 outputEncoding 鍵,且值為 base64 或 hex 之一。 |
相關權限
無。
templateStorage
傳回物件,其中包含用於存取範本儲存空間的方法。範本儲存空間可讓資料在單一範本的執行作業中共用。儲存在範本儲存空間中的資料會在網頁的整個生命週期中持續存在。
語法
const templateStorage = require('templateStorage');
templateStorage.getItem(key);
templateStorage.setItem(key, value);
templateStorage.removeItem(key);
// Deletes all stored values for the template.
templateStorage.clear();
相關權限
範例
const templateStorage = require('templateStorage');
const sendPixel = require('sendPixel');
// Ensure sendPixel is called only once per page.
if (templateStorage.getItem('alreadyRan')) {
data.gtmOnSuccess();
return;
}
templateStorage.setItem('alreadyRan', true);
sendPixel(
data.oncePerPagePixelUrl,
data.gtmOnSuccess,
() => {
templateStorage.setItem('alreadyRan', false);
data.gtmOnFailure();
});
toBase64
toBase64
API 可讓您將字串編碼為 Base64 表示法。
語法
toBase64(input)
參數
參數 | 類型 | 說明 |
---|---|---|
input |
string | 要編碼的字串。 |
範例
const toBase64 = require('toBase64');
const base64Hello = toBase64('hello');
相關權限
無
updateConsentState
將同意權更新項目推送至資料層,在目前事件和該事件觸發的任何代碼完成處理 (或達到代碼處理逾時) 後,盡快處理。系統會保證在資料層中任何已排入佇列的項目之前,先在這個容器中處理更新。進一步瞭解同意聲明。
範例:
const updateConsentState = require('updateConsentState');
updateConsentState({
'ad_storage': 'granted',
'analytics_storage': 'denied',
'third_party_storage': 'granted',
});
語法
updateConsentState(consentSettings)
參數
參數 | 類型 | 說明 |
---|---|---|
consentSettings |
物體 | 用來更新指定同意聲明類型的狀態的物件。 |
consentSettings
物件是任意同意聲明類型字串與 'granted'
或 'denied'
的對應項目。支援下列值:
鍵名 | 類型 | 說明 |
---|---|---|
consentType |
string | 每種類型的同意聲明值可設為「授予」或「拒絕」。 系統會將「granted」以外的任何值視為「denied」。將值設為「undefined」不會對先前的值造成任何影響。 |
相關權限
access_consent
權限,可對 consentSettings 物件中的所有同意類型提供寫入存取權。
測試 API
這些 API 可搭配沙箱 JavaScript 測試,在 Google 代碼管理工具中建立自訂範本的測試。這些測試 API 不需要 require()
陳述式。進一步瞭解自訂範本測試。
assertApi
傳回比對器物件,可用於流暢地對指定 API 做出斷言。
語法
assertApi(apiName)
參數
參數 | 類型 | 說明 |
---|---|---|
apiName |
string | 要檢查的 API 名稱;與傳遞至 require() 的字串相同。 |
比對器
Subject.wasCalled()
Subject.wasNotCalled()
Subject.wasCalledWith(...expected)
Subject.wasNotCalledWith(...expected)
範例
assertApi('sendPixel').wasCalled();
assertApi('getUrl').wasNotCalled();
assertApi('makeNumber').wasCalledWith('8');
assertApi('setInWindow').wasNotCalledWith('myVar', 'theWrongValue');
assertThat
assertThat
API 是以 Google [Truth] 程式庫為範本建立。它會傳回可用於流暢地對主體值做出斷言的物件。斷言失敗會立即停止測試,並將其標示為失敗。不過,如果某項測試失敗,其他測試案例不會受到影響。
語法
assertThat(actual, opt_message)
參數
參數 | 類型 | 說明 |
---|---|---|
actual |
any | 在流暢檢查中使用的值。 |
opt_message |
string | 在斷言失敗時,可選擇要列印的訊息。 |
比對器
Matcher | 說明 |
---|---|
isUndefined() |
斷言主體為 undefined 。 |
isDefined() |
斷言主體不是 undefined 。 |
isNull() |
斷言主體為 null 。 |
isNotNull() |
斷言主體不是 null 。 |
isFalse() |
斷言主體為 false 。 |
isTrue() |
斷言主體為 true 。 |
isFalsy() |
斷言主體為假值。值為 undefined 、null 、false 、NaN 、0 和 '' (空白字串) 為假值。 |
isTruthy() |
斷言主體為真。值為 undefined 、null 、false 、NaN 、0 和 '' (空字串) 為假值。 |
isNaN() |
斷言主體為 NaN 值。 |
isNotNaN() |
斷言主體是 NaN 以外的任何值。 |
isInfinity() |
斷言主體是正無窮或負無窮。 |
isNotInfinity() |
斷言主體是正無限大或負無限大以外的任何值。 |
isEqualTo(expected) |
聲明主旨等於指定的值。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式進行比較。 |
isNotEqualTo(expected) |
斷言主體不等於指定值。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式進行比較。 |
isAnyOf(...expected) |
聲明主體等於指定值之一。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式進行比較。 |
isNoneOf(...expected) |
斷言主體不等於任何給定值。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式進行比較。 |
isStrictlyEqualTo(expected) |
斷言主體與指定值嚴格相等 (=== )。 |
isNotStrictlyEqualTo(expected) |
斷言主體與指定值不完全相等 (!== )。 |
isGreaterThan(expected) |
在有序比較中,斷言主體大於 (> ) 指定的值。 |
isGreaterThanOrEqualTo(expected) |
在有序比較中,斷言主體大於或等於 (>= ) 指定的值。 |
isLessThan(expected) |
在排序比較中,斷言主體小於 (< ) 指定的值。 |
isLessThanOrEqualTo(expected) |
在有序比較中,斷言主體小於或等於 (<= ) 指定的值。 |
contains(...expected) |
斷言主體是陣列或字串,其中包含所有指定值,且順序不限。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式進行比較。 |
doesNotContain(...expected) |
斷言主體是陣列或字串,且不含任何指定值。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式進行比較。 |
containsExactly(...expected) |
斷言主體是陣列,且陣列包含所有指定值 (以任何順序),且不包含其他值。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式比較。 |
doesNotContainExactly(...expected) |
斷言主體是陣列,且陣列內的值與指定值不同時,且值的順序不限。這是值比較,而非參照比較。物件和陣列的內容會以遞迴方式進行比較。 |
hasLength(expected) |
斷言主體是具有指定長度的陣列或字串。如果值不是陣列或字串,斷言一律會失敗。 |
isEmpty() |
斷言主體是空白 (長度 = 0) 的陣列或字串。如果值不是陣列或字串,斷言一律會失敗。 |
isNotEmpty() |
斷言主體是陣列或非空字串 (長度 > 0)。如果值不是陣列或字串,斷言一律會失敗。 |
isArray() |
斷言主體的類型為陣列。 |
isBoolean() |
斷言主體的類型為布林值。 |
isFunction() |
斷言主體的類型為函式。 |
isNumber() |
斷言主體的類型為數字。 |
isObject() |
斷言主體的類型為物件。 |
isString() |
斷言主體的類型為字串。 |
範例
assertThat(undefined).isUndefined();
assertThat(id, 'ID must be defined').isDefined();
assertThat(null).isNull();
assertThat(undefined).isNotNull();
assertThat(true).isTrue();
assertThat(false).isFalse();
assertThat(1).isTruthy();
assertThat('').isFalsy();
assertThat(1/0).isInfinity();
assertThat(0).isNotInfinity();
assertThat(-'foo').isNaN();
assertThat(100).isNotNaN();
assertThat(sentUrl).isEqualTo('https://endpoint.example.com/?account=12345');
assertThat(category).isNotEqualTo('premium');
assertThat(5).isAnyOf(1, 2, 3, 4, 5);
assertThat(42).isNoneOf('the question', undefined, 41.9);
assertThat('value').isStrictlyEqualTo('value');
assertThat('4').isNotStrictlyEqualTo(4);
assertThat(['a', 'b', 'c']).contains('a', 'c');
assertThat(['x', 'y', 'z']).doesNotContain('f');
assertThat(['1', '2', '3']).containsExactly('3', '2', '1');
assertThat(['4', '5']).doesNotContainExactly('4');
assertThat('a string').hasLength(8);
assertThat([]).isEmpty();
assertThat('another string').isNotEmpty();
fail
立即讓目前的測試失敗,並輸出指定的訊息 (如有提供)。
語法
fail(opt_message);
參數
參數 | 類型 | 說明 |
---|---|---|
opt_message |
string | 選用的錯誤訊息文字。 |
範例
fail('This test has failed.');
mock
mock
API 可讓您覆寫沙箱 API 的行為。模擬 API 可安全地用於範本程式碼,但只能在測試模式下運作。系統會在每次測試執行前重設模擬資料。
語法
mock(apiName, returnValue);
參數
參數 | 類型 | 說明 |
---|---|---|
apiName |
string | 要模擬的 API 名稱;與傳遞至 require() 的字串相同 |
returnValue |
any | 要傳回的 API 值,或代替 API 呼叫的函式。如果 returnValue 是函式,系統會呼叫該函式,而非沙箱 API;如果 returnValue 是函式以外的任何值,系統會傳回該值,而非沙箱 API。 |
範例
mock('encodeUri', "https://endpoint.example.com/?account=12345");
mock('sendPixel', function(url, onSuccess, onFailure) {
onSuccess();
});
mockObject
mockObject
API 可讓您覆寫傳回物件的沙箱 API 行為。這個 API 可安全地用於範本程式碼,但只能在測試模式下運作。系統會在每次測試執行前重設模擬資料。
語法
mockObject(apiName, objectMock);
參數
參數 | 類型 | 說明 |
---|---|---|
apiName |
string | 要模擬的 API 名稱;與傳遞至 require() 的字串相同 |
objectMock |
物體 | 要傳回的 API 值,或代替 API 呼叫的函式。必須是物件。 |
範例
const storage = {};
mockObject('localStorage', {
setItem: (key, value) => {storage[key] = value;},
getItem: (key) => storage[key],
});
runCode
在目前的測試環境中,使用指定的輸入資料物件,執行範本的程式碼,也就是「Code」分頁中的內容。
語法
runCode(data)
參數
參數 | 類型 | 說明 |
---|---|---|
data |
物體 | 在測試中使用的資料物件。 |
傳回值
針對變數範本傳回變數的值;針對所有其他範本類型傳回 undefined
。
範例
runCode({field1: 123, field2: 'value'});