Невозможно скопировать переменную JS для предустановленного слота - PullRequest
0 голосов
/ 01 октября 2018

Этот код имеет отношение к показу рекламы на моем сайте.В верхней части определяется каждый из рекламных мест.Тогда у меня есть функция, которая будет загружать любое отдельное объявление.Эта функция должна вытянуть соответствующую переменную рекламного места, определенную в верхней части, но, похоже, она не работает.

        var slot1;
        googletag.cmd.push(function() {
            slot1 = googletag.defineSlot('/50970423/ffn-hb-rect-1', [[300, 250]], 'div-1')
                .addService(googletag.pubads());
            googletag.pubads().disableInitialLoad();
            googletag.pubads().enableSingleRequest();
            googletag.enableServices();
        });     
        var slot2;
        googletag.cmd.push(function() {
            slot2 = googletag.defineSlot('/50970423/ffn-hb-rect-ex', [[300, 250]], 'div-2')
                .addService(googletag.pubads());
            googletag.pubads().disableInitialLoad();
            googletag.pubads().enableSingleRequest();
            googletag.enableServices();
        });

        function refreshBid(adUnitName) {
            if(adUnitName == '/50970423/ffn-hb-rect-1'){
                var slot_to_load = slot1;
            }
            else if(adUnitName == '/50970423/ffn-hb-rect-ex'){
                var slot_to_load = slot2;
            }


            pbjs.que.push(function() {
                pbjs.requestBids({
                    timeout: PREBID_TIMEOUT,
                    adUnitCodes: [adUnitName],
                    bidsBackHandler: function() {
                        pbjs.setTargetingForGPTAsync([adUnitName]);
                        googletag.pubads().refresh([slot_to_load]);
                    }
                });
            });

        }

Дело в том, если я изменю эту строку в конце на googletag.pubads ().refresh ([slot1]);это будет работать идеально (конечно, это работает только для первого рекламного места, поскольку оно жестко запрограммировано, поэтому это не решение проблемы).Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 01 октября 2018

Вы определяете slot_to_load переменную внутри вашего оператора if / else, поэтому в нижней строке slot_to_load равно undefined.Определите переменную вне if / else, а затем установите ее значение внутри, и ваш код будет работать:

function refreshBid(adUnitName) {
        var slot_to_load;
        if(adUnitName == '/50970423/ffn-hb-rect-1'){
            slot_to_load = slot1;
        }
        else if(adUnitName == '/50970423/ffn-hb-rect-ex'){
            slot_to_load = slot2;
        }


        pbjs.que.push(function() {
            pbjs.requestBids({
                timeout: PREBID_TIMEOUT,
                adUnitCodes: [adUnitName],
                bidsBackHandler: function() {
                    pbjs.setTargetingForGPTAsync([adUnitName]);
                    googletag.pubads().refresh([slot_to_load]);
                }
            });
        });

    }
...