Skip to content

Is it possible to get a DOM element in GTM custom template?

Description

So I’ve read through the GTM Custom template APIs; but I don’t find anything regarding getting (e.g.) a div element. I’ve tried copying document from window using copyFromWindow() or calling document.getElementById through callInWindow(), but both times, I always get this error message when I add document to the permissions:

The value must not start with any key predefined on global scope (i.e. in Window), or any JavaScript keywords.

enter image description here

Question

Is there anyway that it is possible to call a DOM element through custom GTM tags? My goal is to create a tag that can inject video’s in selected div elements. I could do this by creating a custom HTML tag, but I don’t want our marketing guy to always go through code. So a tag that asks him for the target ID and video url could make it easier

Answer

No. Preventing access to the DOM (and controlling access to the global namespace) is pretty much the point of sandboxed Javascript. Since GTM is not supposed to interfere with the DOM, this should not usually be a problem (well, that’s what Google thinks at least).

If you need to learn about some property of a DOM object, you can get this (i.e. the property, not the object itself) via a DOM type variable and pass it in as a data item by creating a field that accept variables.

Simo has a bit about this in his inital write-up on custom templates (you have to scroll down quite a bit). While Google has added a number of APIs since, I doubt that a DOM API is coming up, because that would pretty much defy the purpose of sandboxed Javascript.