我使用nuxt组合api。每一页都有许多不同的广告,所以我创建了一个可合成的结构来获取广告。这很好,但例如,如果我在一个页面中有5个广告,它将在slotRenderEnded函数中呈现25次。(x^2次)
useAds.js
import { ref } from '@nuxtjs/composition-api';
let slots = {};
const useAds = () => {
const isAdLoaded = ref(null);
const createAd = ({ path, size, id }) => {
googletag.cmd.push(() => {
googletag.pubads().collapseEmptyDivs();
slots[id] = googletag.defineSlot(path, size, id).addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
googletag.display(id);
googletag.pubads().addEventListener('slotRenderEnded', event => {
console.log('slotRenderEnded');
if (event.slot.getSlotElementId() === id) isAdLoaded.value = !event.isEmpty;
});
});
};
const destroyAds = id => {
if (window.googletag && window.googletag.apiReady && slots[id]) {
window.googletag.destroySlots([slots[id]]);
window.googletag.pubads().refresh([slots[id]]);
}
};
return { isAdLoaded, createAd, destroyAds };
};
export default useAds;
控制台中的
25 slotRenderEnded
发布于 2022-11-15 11:47:12
看起来,每次定义插槽时都要创建/附加一个事件。这些事件被附加到GPT实例化中,当呈现一个广告时,每个已注册的侦听器都会被触发。
您需要每页定义一次事件列表器(在您的槽创建工作流之外),当您定义GPT时,每次定义和呈现一个时隙时,将使用其“时隙”属性/ GPT参数触发泛型/全局事件列表器。
https://stackoverflow.com/questions/74419298
复制相似问题