9

关于如何将事件注册到 gpt 服务似乎有几个问题:
Google Publisher Tag registering to Events
registering to events with google publisher tag

文档中明确定义了如何执行此操作:
googletag.pubads().addEventListener('eventName', callbackFn);

当组件(React)安装在回调函数中时,我将我的事件添加到服务中,window.googletag.cmd.pushGoogle 本教程中所述。

现在的问题是,每次我更改页面时,都会向服务中添加更多的事件侦听器。通过使用此方法(来自文档),我可以确保只有一个事件侦听器在实际存在的插槽上执行:

googletag.pubads().addEventListener('impressionViewable', function(event) {
  if (event.slot == targetSlot) { // will only run on target slot
    // Slot specific logic.
  }
});

但是更多的事件侦听器将保持活动状态并继续执行(不执行 if 语句中的代码)。

现在,我假设谷歌会实现这样的东西(在 componentWillUnmount 上运行):
googletag.pubads().removeEventListener('eventName', callbackFn);

但它在文档中不存在,我似乎找不到任何方法从服务中删除活动的事件侦听器?

4

1 回答 1

2

所以我选择了这个:

let eventListnerCreated = false;
if(!eventListnerCreated) {
    eventListnerCreated = googletag.pubads().addEventListener("slotRenderEnded", function(event) {
          // blablabla
    });
}

不干净。但会工作。

我知道这并不能解决删除事件侦听器的原始问题,但这不会让我们一次又一次地创建事件侦听器。

于 2020-03-12T09:40:54.873 回答