Dalam panduan ini, Anda akan mempelajari cara mengonversi tag HTML kustom yang ada untuk menggunakan JavaScript dengan sandbox.
Tutorial ini akan memanfaatkan API injectScript
. injectScript
adalah API umum yang digunakan untuk mengonversi tag yang ada yang mengandalkan skrip pihak ketiga. Tag ini sering kali menyiapkan fungsi dasar saat skrip dimuat, lalu mengayakannya dengan fungsi tambahan setelah skrip dimuat.
Tag asli
<!-- Google Analytics -->
<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<!-- End Google Analytics -->
Mengonversi kode
Perhatikan bagian JavaScript dari tag di atas:
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
Untuk membuat JavaScript dengan sandbox yang diperlukan, lihat API JavaScript native yang digunakan skrip ini, dan konversi kode Anda untuk menggunakan API JavaScript dengan sandbox yang setara.
Misalnya, dalam tag analytics.js
, API JavaScript native ini digunakan:
JavaScript Native | JavaScript dengan Sandbox |
---|---|
window.ga |
setInWindow |
arguments |
createArgumentsQueue |
+ new Date |
getTimestamp |
Untuk menggunakan API JavaScript dengan sandbox dalam skrip, Anda memerlukan require
.
Misalnya, untuk menggunakan API setInWindow()
, tambahkan ke bagian atas skrip Anda:
const setInWindow = require('setInWindow');
Selanjutnya, konversikan window.ga
:
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)}
// becomes
const createArgumentsQueue = require('createArgumentsQueue');
const ga = createArgumentsQueue('ga', 'ga.q');
Lalu, konversikan penetapan ga.l
:
ga.l=+new Date;
// becomes
const getTimestamp = require('getTimestamp');
setInWindow('ga.l', getTimestamp(), true);
Terakhir, konversikan kedua panggilan menjadi ga()
:
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
// becomes
const trackingId = data.trackingId;
ga('create', trackingId, 'auto');
ga('send', 'pageview');
Untuk menggunakan data.trackingId
, tambahkan kolom ke template Anda:
Buka tab
Fields
, lalu klikAdd Field
.Pilih jenis kolom
Text input
.Ubah ID dari
text1
menjaditrackingId
.
Pada tahap ini, Anda telah mengonversi tag <script/>
pertama, tetapi Anda juga perlu memuat dalam skrip pendukung.
Untuk melakukannya:
<script async src='https://www.google-analytics.com/analytics.js'></script>
// becomes
const injectScript = require('injectScript');
const url = 'https://www.google-analytics.com/analytics.js';
injectScript(url, data.gtmOnSuccess, data.gtmOnFailure, url);
Meneruskan cacheToken
ke injectScript()
akan mengaktifkan pengoptimalan. Untuk
skenario berikut, skrip analytics.js
hanya akan dimuat satu kali:
- Tag yang berjalan beberapa kali
- Lebih dari satu tag dari template kustom ini dalam penampung yang sama.
- Template kustom lain yang menggunakan
injectScript()
dengancacheToken
yang sama
Izin
Jika Anda mencoba menjalankan kode ini sebelum tahap ini, Anda mungkin melihat beberapa error di konsol.
Error ini muncul karena JavaScript dengan sandbox mengharuskan Anda untuk mendeklarasikan nilai dan URL yang Anda akses. Dalam contoh ini, Anda perlu mengakses variabel global ga.q
, ga.l
, dan ga
, dan sebaiknya memasukkan skrip yang dihosting di https://www.google-analytics.com/analytics.js
.
Untuk mengonfigurasi izin Global Variables
:
Buka tab
Permissions
, LuaskanAccesses Global Variables
, lalu klikAdd Key
.Gunakan
ga
untuk kunci tersebut, lalu centang kotak untukRead
,Write
, danExecute
.Ulangi proses ini untuk
ga.q
danga.l
. Perhatikan bahwa kolom ini tidak memerlukan izinExecute
.
Pada tahap ini, jika Anda mengklik Jalankan Kode lagi, Anda akan menerima pesan error baru di konsol.
Kali ini, error menyebutkan Inject Scripts
.
Untuk mengonfigurasi izin Inject Scripts
:
Tambahkan
https://www.google-analytics.com/analytics.js
keAllowed URL Match Patterns
.
Kini saat Anda mengklik Jalankan Kode, seharusnya tidak ada error di konsol. Anda berhasil mengonversi tag menjadi template kustom. Klik Save
dan gunakan tag baru Anda seperti Tag lainnya di Google Tag Manager.
Tag yang dikonversi sepenuhnya
Hasil akhir JavaScript dengan sandbox akan terlihat seperti ini:
const setInWindow = require('setInWindow');
const copyFromWindow = require('copyFromWindow');
const createArgumentsQueue = require('createArgumentsQueue');
const getTimestamp = require('getTimestamp');
const injectScript = require('injectScript');
const trackingId = data.trackingId;
const ga = createArgumentsQueue('ga', 'ga.q');
setInWindow('ga.l', getTimestamp(), false);
ga('create', trackingId, 'auto');
ga('send', 'pageview');
const url = 'https://www.google-analytics.com/analytics.js';
injectScript(url, data.gtmOnSuccess, data.gtmOnFailure, url);