无法为预设插槽复制JS变量

时间:2018-10-01 03:04:39

标签: javascript google-dfp prebid.js

此代码与在我的网站上投放广告有关。顶部是定义每个广告位的位置。然后,我将具有可以加载任何单个广告的功能。此功能需要提取顶部定义的适当的广告位变量,但似乎不起作用。

        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 :(得分:1)

您要在if / else语句中定义slot_to_load变量 内,因此底行slot_to_loadundefined。在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]);
                }
            });
        });

    }