במדריך הזה נסביר איך להמיר תג HTML מותאם אישית שכבר קיים. להשתמש ב-JavaScript בארגז חול.
במדריך הזה נשתמש ב-API של injectScript
. injectScript
הוא נפוץ
ה-API שמשמש להמרת תג קיים המסתמך על סקריפטים של צד שלישי. לרוב התגים האלה מגדירים פונקציונליות בסיסית בזמן טעינת הסקריפט, ואז מוסיפים לה פונקציונליות נוספת אחרי טעינת הסקריפט.
התג המקורי
<!-- 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 -->
המרת הקוד
נבחן את חלק ה-JavaScript בתג שלמעלה:
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
כדי ליצור את ה-JavaScript הדרוש בארגז החול, בודקים מהו קוד ה-JavaScript המקורי ממשקי API שהסקריפט הזה משתמש בהם וממירים את הקוד לשימוש בארגז החול המקביל ממשקי API של JavaScript.
לדוגמה, בתג analytics.js
, נעשה שימוש בממשקי ה-API המקוריים הבאים של JavaScript:
JavaScript מקורי | JavaScript בארגז חול |
---|---|
window.ga |
setInWindow |
arguments |
createArgumentsQueue |
+ new Date |
getTimestamp |
כדי להשתמש בממשקי ה-API של JavaScript שמופעלים בארגז חול (sandbox) בסקריפט, צריך require
אותם.
לדוגמה, כדי להשתמש ב-API setInWindow()
, מוסיפים אותו לראש הסקריפט:
const setInWindow = require('setInWindow');
בשלב הבא, ממירים את window.ga
:
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)}
// becomes
const createArgumentsQueue = require('createArgumentsQueue');
const ga = createArgumentsQueue('ga', 'ga.q');
לאחר מכן, ממירים את ההקצאה ga.l
:
ga.l=+new Date;
// becomes
const getTimestamp = require('getTimestamp');
setInWindow('ga.l', getTimestamp(), true);
לבסוף, ממירים את שתי הקריאות ל-ga()
:
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
// becomes
const trackingId = data.trackingId;
ga('create', trackingId, 'auto');
ga('send', 'pageview');
כדי להשתמש ב-data.trackingId
, צריך להוסיף שדה לתבנית:
עוברים לכרטיסייה
Fields
ולוחצים עלAdd Field
.בוחרים את סוג השדה
Text input
.משנים את המזהה מ-
text1
ל-trackingId
.
בשלב הזה המרתם את תג <script/>
הראשון, אבל צריך גם להשתמש בו
כדי לטעון אותו בסקריפט התומך.
לשם כך:
<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);
העברה של cacheToken
אל injectScript()
מאפשרת אופטימיזציה. עבור
בתרחישים הבאים, הסקריפט analytics.js
ייטען רק פעם אחת:
- תג שפועל מספר פעמים
- יותר מתג אחד מהתבנית המותאמת אישית הזו באותו מאגר תגים.
- תבניות אחרות בהתאמה אישית שנעשה בהן שימוש ב-
injectScript()
עם אותוcacheToken
הרשאות
אם ניסית להריץ את הקוד הזה לפני השלב הזה, ייתכן שהבחנת במסוף.
השגיאות האלה מופיעות מכיוון ש-JavaScript בארגז חול (sandbox) דורש מכם להצהיר על
ואת כתובות ה-URL שאליהן אתם ניגשים. בדוגמה הזו צריך לגשת אל ga.q
,
ga.l
ו-ga
משתנים גלובליים, וברצונך להחדיר סקריפט שמתארח
אל https://www.google-analytics.com/analytics.js
.
כדי להגדיר את ההרשאות של Global Variables
:
עוברים לכרטיסייה
Permissions
, מרחיבים את הקטעAccesses Global Variables
ולוחצים על לאחר מכן לוחצים עלAdd Key
.משתמשים במפתח
ga
ומסמנים את התיבות שלRead
,Write
ו-Execute
חוזרים על התהליך הזה גם עבור
ga.q
וגםga.l
. שימו לב שהשדות האלה לא צריכים ההרשאהExecute
.
בשלב הזה אם תלחצו שוב על Run Code (הרצת קוד), תופיע שגיאה חדשה במסוף.
הפעם מצוין בשגיאה Inject Scripts
.
כדי להגדיר את ההרשאה Inject Scripts
:
מוסיפים את
https://www.google-analytics.com/analytics.js
אלAllowed URL Match Patterns
.
מעכשיו, כשלוחצים על הרצת קוד, לא אמורה להיות שגיאה במסוף. יש לך
התג המומר בהצלחה לתבנית מותאמת אישית. לוחצים על Save
.
ומשתמשים בתג החדש כמו בכל תג אחר ב-Google Tag Manager.
תג שהומר במלואו
התוצאה הסופית של JavaScript ב-sandbox אמורה להיראות כך:
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);