במדריך הזה נסביר איך להמיר תג 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', 'GA-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', 'GA-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', 'GA-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);