Javascript: 动态生成的函数,指的是外部包含的带有GPT渲染的JS文件
Javascript: Dynamically generated functions, referring to an external included JS File with GPT rendering
感谢您查看此内容。我想我的想法在概念上犯了错误,这就是为什么我会先让你知道我的情况:
我有 1 或 x DIVs 用于显示 DFP 广告单元并将使用这些动态生成的函数。一旦 DIV 位于可见区域,该函数就会触发:
- 我动态生成 links
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);
}
使用此功能,我动态创建了 link 并且到目前为止它有效。因此,我为 myfmydiv1/div1、myfmydiv2/div2、myfmydiv3/div3 等生成 links。并将它们添加到父节点。
- 我动态生成 AdSlots
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();
});
在这部分中,我生成广告单元并将其添加到全局变量 "window['slot_'.concat(slot.toString())]"(<== 我在网上看到过这个,我很好奇这是否是正确的方法。至少我可以在 GCR 开发工具中看到它)
- 我在#1 动态生成引用 link 的函数。
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。任何 ideas/help?
我和一位经验丰富的程序员同事一起找到了解决方案。
他建议在最后一段代码中对变量函数使用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]]);});
}
}
感谢您查看此内容。我想我的想法在概念上犯了错误,这就是为什么我会先让你知道我的情况:
我有 1 或 x DIVs 用于显示 DFP 广告单元并将使用这些动态生成的函数。一旦 DIV 位于可见区域,该函数就会触发:
- 我动态生成 links
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);
}
使用此功能,我动态创建了 link 并且到目前为止它有效。因此,我为 myfmydiv1/div1、myfmydiv2/div2、myfmydiv3/div3 等生成 links。并将它们添加到父节点。
- 我动态生成 AdSlots
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();
});
在这部分中,我生成广告单元并将其添加到全局变量 "window['slot_'.concat(slot.toString())]"(<== 我在网上看到过这个,我很好奇这是否是正确的方法。至少我可以在 GCR 开发工具中看到它)
- 我在#1 动态生成引用 link 的函数。
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。任何 ideas/help?
我和一位经验丰富的程序员同事一起找到了解决方案。 他建议在最后一段代码中对变量函数使用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]]);});
}
}