Advertisement
clickio

Refresh after 30sec anyway

Dec 5th, 2019
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 7.10 KB | None | 0 0
  1. <script>
  2. /*
  3.    Разработчик: Евгений Бондарь
  4.    Версия: 1.0.4
  5.    Назначение скрипта: авторефреш слотов Ad Manager с использованием стандартного функционала GPT-кода.
  6.                        По-умолчанию при достижении 30 сек интервала И видимости 51% ад юнит будет обновлен через 1 сек
  7.                        Поддерживается работа с ин-артикл блоками / мультистики блоками
  8.  
  9.    Внимание! При использовании в бою - просьба удалить все комментарии из кода.
  10.              Обязательно задекларировать использование авторефреша
  11. */
  12. (function(){
  13.     /*
  14.       массив, в котором в кавычках перечисляются sd24.dfp_adunit_name, которые необходимо авторефрешить
  15.       т.е. если на странице необходимо авторефрешить несколько блоков, код можно имплементировать через site.rtr_presource поле
  16.     */
  17.     var __lx_adName = ["clickio_area_111111_300x250", "clickio_area_222222_300x250"];
  18.    
  19.     /* интервал для авторефреша в сек, в Ad Manager можно задекларировать интервалы: 30, 60, 90, 120, 180, 240, 300, 360 */
  20.     var __lx_timeoutDelay = 30;
  21.     /* интервал для авторефреша в секундах при отсутствии показа */
  22.     var __lx_timeoutUnsold = 30;
  23.    
  24.     /* максимальное количество попыток авторефреша подряд при отсутствии показа */
  25.     var __lx_unsoldMaxCount = 5;
  26.     /* минимальный процент видимости (viewability) во вьюпорте, когда можно рефрешить слот ад юнита */
  27.     var __lx_minPercentage = 51;
  28.     /* таймаут в сек, после которого происходит авторефреш при достижении ад юнитом минимального viewability */
  29.     var __lx_refreshAfter = 1;
  30.     /* включает отладочные сообщения в консоль DevTools */
  31.     var __lx_debug = false;
  32.    
  33.  
  34.     var __lx_unsoldCounts = {};
  35.  
  36.     window.googletag = window.googletag || {};
  37.     window.googletag.cmd = window.googletag.cmd || [];
  38.     var __lx_refreshing = {};
  39.     var __lx_defaultSlotData = {
  40.         inViewPercentage: 0,
  41.         slotRendered: true
  42.     };
  43.     var __lx_log = function(message) {
  44.         if(__lx_debug) console.log(message);
  45.     }
  46.     __lx_log("pre_source fired");
  47.     var __lx_checkSlot = function(slotId) {
  48.         return __lx_adName.some(function(adName) {
  49.             return slotId.indexOf(adName) !== -1;
  50.         });
  51.     }
  52.     var __lx_refreshTimeout = function(slot){
  53.         __lx_log("__lx_refreshTimeout fired");
  54.         var slotId = slot.getSlotId().getId();
  55.         __lx_refreshing[slotId] = Object.assign({}, __lx_defaultSlotData);
  56.         __lx_log("Setting timeout for slot " + slotId + " after " + __lx_timeoutDelay + " second(s)");
  57.         setTimeout(function(){
  58.             __lx_log("Timeout for slot " + slotId + " fires");
  59.             //if(__lx_refreshing[slotId]["inViewPercentage"] && __lx_refreshing[slotId]["inViewPercentage"] >= __lx_minPercentage )
  60.            //{
  61.                //__lx_log("Slot " + slotId + " is in viewport (percentage = "+ __lx_refreshing[slotId]["inViewPercentage"] +"), refreshing");
  62.                 googletag.pubads().refresh([slot]);
  63.             //}
  64.             //else
  65.             //{
  66.             //    __lx_log("Slot " + slotId + " is not in viewport (percentage = "+ __lx_refreshing[slotId]["inViewPercentage"] +"), setting slotRendered to false");
  67.             //    __lx_refreshing[slotId]["slotRendered"] = false;
  68.             //}
  69.         }, __lx_timeoutDelay * 1000);
  70.     }
  71.  
  72.     googletag.cmd.push(function() {
  73.         __lx_log("googletag.cmd.push fired");        
  74.         googletag.pubads().addEventListener("slotResponseReceived" /*"slotRenderEnded"*/, function(event){
  75.             __lx_log("addEventListener - slotRenderEnded fired");
  76.             __lx_log("Event object:");
  77.             __lx_log(event);
  78.             __lx_log("Response Information:");
  79.             __lx_log(event.slot.getResponseInformation());
  80.             var slotId = event.slot.getSlotId().getId();
  81.             __lx_log("slotRenderEnded slotId: " + slotId);
  82.             __lx_log("slotRenderEnded __lx_adName: " + __lx_adName);
  83.             __lx_log(__lx_checkSlot(slotId));
  84.             if(__lx_checkSlot(slotId))
  85.             {
  86.                 if(!__lx_unsoldCounts[slotId]) __lx_unsoldCounts[slotId] = 0;
  87.                 if(!event.slot.getResponseInformation())
  88.                 {
  89.  
  90.                     __lx_unsoldCounts[slotId]++;
  91.                     __lx_log("Empty response. Counter: " + __lx_unsoldCounts[slotId]);
  92.                     if(__lx_unsoldCounts[slotId] < __lx_unsoldMaxCount)
  93.                    {
  94.                        setTimeout(function(){
  95.                            googletag.pubads().refresh([event.slot]);
  96.                        }, __lx_timeoutUnsold * 1000);
  97.                    }
  98.                }
  99.                else
  100.                {
  101.                    __lx_unsoldCounts[slotId]=0;
  102.                    __lx_refreshTimeout(event.slot);
  103.                }
  104.            }
  105.            __lx_log(__lx_refreshing);            
  106.        });        
  107.        __lx_log("BEFORE slotVisibilityChanged fired");
  108.        googletag.pubads().addEventListener("slotVisibilityChanged", function(event){
  109.            var slotId = event.slot.getSlotId().getId();
  110.            __lx_log("slotVisibilityChanged  slotId: " + slotId);
  111.            __lx_log("slotVisibilityChanged  __lx_adName: " + __lx_adName);
  112.            __lx_log(__lx_checkSlot(slotId));
  113.            if( __lx_checkSlot(slotId) )
  114.            {
  115.                __lx_log("addEventListener - slotVisibilityChanged fired");
  116.                if(!__lx_refreshing[slotId])
  117.                {
  118.                  __lx_refreshTimeout(event.slot);
  119.                }
  120.                __lx_refreshing[slotId]["inViewPercentage"] = event.inViewPercentage;
  121.                __lx_log("Viewable percentage changed for slot " + slotId + ": " + event.inViewPercentage);
  122.                if(__lx_refreshing[slotId]["inViewPercentage"] >= __lx_minPercentage && !__lx_refreshing[slotId]["slotRendered"])
  123.                {
  124.                    __lx_log("Setting timeout for slot " + slotId + " to refresh after " + __lx_refreshAfter + " second(s)");
  125.                     __lx_refreshing[slotId]["slotRendered"] = true;
  126.                     setTimeout(function(){
  127.                         googletag.pubads().refresh([event.slot]);
  128.                     }, __lx_refreshAfter * 1000);
  129.                 }
  130.                 __lx_log(__lx_refreshing);
  131.             }
  132.         });
  133.     });
  134. })();
  135. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement