关于如何向gpt服务注册事件似乎有几个问题:
Google Publisher Tag registering to Events
registering to events with google publisher tag
documentation中明确定义了操作方法:
googletag.pubads().addEventListener('eventName', callbackFn);
当组件(React)如this tutorial by Google中所述安装在window.googletag.cmd.push
的回调函数中时,我将事件添加到服务中。
现在的问题是,每次更改页面时,都会向该服务中添加更多事件侦听器。通过使用此方法(从文档中),我可以确保只有一个事件侦听器在实际存在的插槽上执行:
googletag.pubads().addEventListener('impressionViewable', function(event) {
if (event.slot == targetSlot) { // will only run on target slot
// Slot specific logic.
}
});
但是更多的事件侦听器将保持活动状态并继续执行(不执行if语句中的代码)。
现在,我以为Google会实现这样的东西(在componentWillUnmount上运行):
googletag.pubads().removeEventListener('eventName', callbackFn);
但是它在文档中不存在,我似乎找不到任何从服务中删除活动事件侦听器的方法?
答案 0 :(得分:2)
所以我去了:
let eventListnerCreated = false;
if(!eventListnerCreated) {
eventListnerCreated = googletag.pubads().addEventListener("slotRenderEnded", function(event) {
// blablabla
});
}
不干净。但是可以。
我知道这并不能解决删除事件侦听器的最初问题,但这不会让我们一次又一次地创建事件侦听器。