1: What I want to do is check if a page contains a specific class with a specific string, and if it does, send an event to Google Tag Manager.
2: I also need a macro to check if a certain element exists on a page and if it does, fire the tag above.
What I have been able to get together so far is the supposed tag:
<html>
<head></head>
<body>
...
<a class="myClass">Captured value</a>
...
</body>
</html>
My tag to be fired using JavaScript would look something like this:
<script>
var x = document.getElementsByClassName("myClass")[0].innerHTML;
if (x.match ("Captured value")) {
dataLayer.push({'event':'captured'});
}
</script>
So this tag will fire if it sees the above anchor with that specific class. Using the above code though, I keep getting errors:
Uncaught Type Error: Cannot read property 'innerHTML' of undefined(anonymous function)
@VM490:2InjectedScript._evaluateOn
@VM479:883InjectedScript._evaluateAndWrap
@VM479:816InjectedScript.evaluate
@VM479:682
How would I write a cleaner code to not generate an error if the class doesn't exist?
Regarding number two, how would I write a function with a return statement? I just can't figure this one out. I have tried something along the lines of:
function () {
var t = document.getElementsByClassName("myClass")[0].innerHTML;
var y = dataLayer.push({'event':'trigger'})
if (t.match ("Captured value")) {
return y;
}
I want to use a macro to check if the class exists on a page with the correct value, which in turn I can use as a trigger to fire the first tag. To use macros in GTM, I need to return a value. I just can't figure out how to check for the class value and have my tag fire upon its validation.
Another way to go is of course to write a custom HTML tag to fire on all pages and have the JavaScript look for, validate and send the event. I currently do not possess the JavaScript aptitude to figure out how that would look though.
Any suggestions are highly appreciated.
My approach was all backwards. I attempted to use a JavaScript solution while I could just use a custom JS inside of Tag Manager to check for a defined value and fire a trigger if it resolved to true.
The methodology I was thinking about was about right I guess, but the way about doing it was over complicating things.
What I did was add a custom JavaScript macro named cjs.return class (using v1 for this said container) and added the following code:
function (){
x = document.getElementsByClassName("myClass")[0].innerHTML;
return x;
}
This function returned either undefined or "Captured value" depending on if it was the right page or not. I then set up a new rule to trigger my tag if:
This new rule triggered my tag, which in turn could send the data on the specific set of pages I wanted it to fire on.
Thanks to both Eike and nyuen for answering to give me a clearer picture of what I did wrong.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다