Javascript:动态生成的函数,引用带有GPT渲染的外部包含的JS文件

时间:2017-12-12 13:17:30

标签: javascript dynamic external google-dfp gpt

感谢您查看此内容。我想我在想法中犯了一个概念上的错误,这就是为什么我会首先让你了解我的情景:

我有一个或多个DIV,我在其中显示DFP广告管理系统AdUnits,并将使用这些动态生成的功能。一旦DIV处于可见区域,该功能就会触发:

  1. 我动态生成链接
  2. 
    
      function scriptincluder(divid){
        var gbgscript = document.createElement('script');
        gbgscript.async = true;
        gbgscript.type = 'text/javascript';
        gbgscript.src = 'https://anyscript.net/script.js?function=myfmydiv1&div=mydiv1 ';
        var node = document.getElementsByTagName('script')[0];
        node.parentNode.insertBefore(gbgscript, node);
      }
    
    
    

    使用此功能,我动态创建链接,到目前为止这是有效的。所以我为myfmydiv1 / div1,myfmydiv2 / div2,myfmydiv3 / div3 ......等等生成链接。并将它们添加到parentNode。

    1. 我动态生成AdSlots
    2. 
      
       googletag.cmd.push(function() {
              for (var slot in divslots) {
                      window['slot_'.concat(slot.toString())] = googletag.defineSlot('/Adslot/Adslot/Adslot/Adslot/Adslot/Adslot', slotsize[slot], slot.toString()).addService(googletag.pubads());
      
                      // generate external link pixel from #1:
                      scriptincluder(slot.toString());
              }
              googletag.pubads().enableSingleRequest();
              googletag.pubads().disableInitialLoad();  // ad unit will not render yet
              googletag.enableServices();
          });
      
      
      

      在这部分中,我生成广告单元并将其添加到全局变量"窗口[' slot _' .concat(slot.toString())]" (< ==我在网上看过这个,我很好奇,如果这是正确的方法。至少我可以在GCR开发工具中看到它。)

      1. 我生成了动态引用#1链接的函数。
      2. 
        
          for (var slot in divslots) {
            var [‘myf’ + escape(slot)] = function() { 
                alert("I am: " + slot);
                googletag.cmd.push(function() {
                    googletag.pubads().refresh([window['slot_'.concat(key2.toString())]]);});
            }
          }
        
        
        

        一旦DIV插槽位于可见区域并刷新广告单元,就会触发该功能。

        它总是触发错误的功能。例如,div1触发div2的功能,而div1实际上并不加载,而是div2。任何想法/帮助?

1 个答案:

答案 0 :(得分:0)

我和我的一位经验丰富的程序员同事一起找到了解决方案。 他建议在最后一段代码中使用 cont变量作为变量函数。

  for (var slot in divslots) {
    
    const myFunction = 'myf' + escape(slot);
    const mySlot = 'slot_'.concat(slot.toString());
  
    var [myFunction] = function() { 
        alert("I am: " + slot);
        googletag.cmd.push(function() {
            googletag.pubads().refresh([window[mySlot]]);});
    }
  }