Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <script>
- /*
- Разработчик: Евгений Бондарь
- Версия: 1.0.4
- Назначение скрипта: авторефреш слотов Ad Manager с использованием стандартного функционала GPT-кода.
- По-умолчанию при достижении 30 сек интервала И видимости 51% ад юнит будет обновлен через 1 сек
- Поддерживается работа с ин-артикл блоками / мультистики блоками
- Внимание! При использовании в бою - просьба удалить все комментарии из кода.
- Обязательно задекларировать использование авторефреша
- */
- (function(){
- /*
- массив, в котором в кавычках перечисляются sd24.dfp_adunit_name, которые необходимо авторефрешить
- т.е. если на странице необходимо авторефрешить несколько блоков, код можно имплементировать через site.rtr_presource поле
- */
- var __lx_adName = ["clickio_area_111111_300x250", "clickio_area_222222_300x250"];
- /* интервал для авторефреша в сек, в Ad Manager можно задекларировать интервалы: 30, 60, 90, 120, 180, 240, 300, 360 */
- var __lx_timeoutDelay = 30;
- /* интервал для авторефреша в секундах при отсутствии показа */
- var __lx_timeoutUnsold = 30;
- /* максимальное количество попыток авторефреша подряд при отсутствии показа */
- var __lx_unsoldMaxCount = 5;
- /* минимальный процент видимости (viewability) во вьюпорте, когда можно рефрешить слот ад юнита */
- var __lx_minPercentage = 51;
- /* таймаут в сек, после которого происходит авторефреш при достижении ад юнитом минимального viewability */
- var __lx_refreshAfter = 1;
- /* включает отладочные сообщения в консоль DevTools */
- var __lx_debug = false;
- var __lx_unsoldCounts = {};
- window.googletag = window.googletag || {};
- window.googletag.cmd = window.googletag.cmd || [];
- var __lx_refreshing = {};
- var __lx_defaultSlotData = {
- inViewPercentage: 0,
- slotRendered: true
- };
- var __lx_log = function(message) {
- if(__lx_debug) console.log(message);
- }
- __lx_log("pre_source fired");
- var __lx_checkSlot = function(slotId) {
- return __lx_adName.some(function(adName) {
- return slotId.indexOf(adName) !== -1;
- });
- }
- var __lx_refreshTimeout = function(slot){
- __lx_log("__lx_refreshTimeout fired");
- var slotId = slot.getSlotId().getId();
- __lx_refreshing[slotId] = Object.assign({}, __lx_defaultSlotData);
- __lx_log("Setting timeout for slot " + slotId + " after " + __lx_timeoutDelay + " second(s)");
- setTimeout(function(){
- __lx_log("Timeout for slot " + slotId + " fires");
- //if(__lx_refreshing[slotId]["inViewPercentage"] && __lx_refreshing[slotId]["inViewPercentage"] >= __lx_minPercentage )
- //{
- //__lx_log("Slot " + slotId + " is in viewport (percentage = "+ __lx_refreshing[slotId]["inViewPercentage"] +"), refreshing");
- googletag.pubads().refresh([slot]);
- //}
- //else
- //{
- // __lx_log("Slot " + slotId + " is not in viewport (percentage = "+ __lx_refreshing[slotId]["inViewPercentage"] +"), setting slotRendered to false");
- // __lx_refreshing[slotId]["slotRendered"] = false;
- //}
- }, __lx_timeoutDelay * 1000);
- }
- googletag.cmd.push(function() {
- __lx_log("googletag.cmd.push fired");
- googletag.pubads().addEventListener("slotResponseReceived" /*"slotRenderEnded"*/, function(event){
- __lx_log("addEventListener - slotRenderEnded fired");
- __lx_log("Event object:");
- __lx_log(event);
- __lx_log("Response Information:");
- __lx_log(event.slot.getResponseInformation());
- var slotId = event.slot.getSlotId().getId();
- __lx_log("slotRenderEnded slotId: " + slotId);
- __lx_log("slotRenderEnded __lx_adName: " + __lx_adName);
- __lx_log(__lx_checkSlot(slotId));
- if(__lx_checkSlot(slotId))
- {
- if(!__lx_unsoldCounts[slotId]) __lx_unsoldCounts[slotId] = 0;
- if(!event.slot.getResponseInformation())
- {
- __lx_unsoldCounts[slotId]++;
- __lx_log("Empty response. Counter: " + __lx_unsoldCounts[slotId]);
- if(__lx_unsoldCounts[slotId] < __lx_unsoldMaxCount)
- {
- setTimeout(function(){
- googletag.pubads().refresh([event.slot]);
- }, __lx_timeoutUnsold * 1000);
- }
- }
- else
- {
- __lx_unsoldCounts[slotId]=0;
- __lx_refreshTimeout(event.slot);
- }
- }
- __lx_log(__lx_refreshing);
- });
- __lx_log("BEFORE slotVisibilityChanged fired");
- googletag.pubads().addEventListener("slotVisibilityChanged", function(event){
- var slotId = event.slot.getSlotId().getId();
- __lx_log("slotVisibilityChanged slotId: " + slotId);
- __lx_log("slotVisibilityChanged __lx_adName: " + __lx_adName);
- __lx_log(__lx_checkSlot(slotId));
- if( __lx_checkSlot(slotId) )
- {
- __lx_log("addEventListener - slotVisibilityChanged fired");
- if(!__lx_refreshing[slotId])
- {
- __lx_refreshTimeout(event.slot);
- }
- __lx_refreshing[slotId]["inViewPercentage"] = event.inViewPercentage;
- __lx_log("Viewable percentage changed for slot " + slotId + ": " + event.inViewPercentage);
- if(__lx_refreshing[slotId]["inViewPercentage"] >= __lx_minPercentage && !__lx_refreshing[slotId]["slotRendered"])
- {
- __lx_log("Setting timeout for slot " + slotId + " to refresh after " + __lx_refreshAfter + " second(s)");
- __lx_refreshing[slotId]["slotRendered"] = true;
- setTimeout(function(){
- googletag.pubads().refresh([event.slot]);
- }, __lx_refreshAfter * 1000);
- }
- __lx_log(__lx_refreshing);
- }
- });
- });
- })();
- </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement