常见广告类型
ads.txt
将ads.txt放在发布站点的根目录下,申请广告。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 成功申请,获取可以放置的广告代码如下:
Here below the TAGs (/head)
<link rel="dns-prefetch" href="//exmarketplace.com"> <link rel="preconnect" href="//cdn.exmarketplace.com"> <link rel="preconnect" href="//securepubads.g.doubleclick.net"> <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script> <script async src="https://cdn.exmarketplace.com/bidder/augovercast/augovercast.dfp.min.js"></script>
Here below the DIV (body): <!--Masterhead--> <div class="gptslot" data-adunitid="0"></div>
<!--Incontent_1--> <div class="gptslot" data-adunitid="1"></div>
<!--Incontent_2--> <div class="gptslot" data-adunitid="2"></div>
<!--Incontent_3--> <div class="gptslot" data-adunitid="3"></div>
<!--Incontent_4--> <div class="gptslot" data-adunitid="4"></div>
|
Google Ad Manager
这种方式要求每个网页里只能放入一次不同的广告div。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| 优化下后需要插入的代码如下:
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script> ********300x250****** <div id="be_augdamp_300x250"> <script>***</script> </div>
********300x250_1******
<div id="be_augdamp_300x250_1"> <script>***</script> </div>
********300x250_2***** <div id="be_augdamp_300x250_2"> <script>***</script> </div>
*******336x280******* <div id="be_augdamp_336x280"> <script>***</script> </div>
*******336x280_1******* <div id="be_augdamp_336x280_1"> <script>***</script> </div>
***INTERSTITIAL**** Header ====== <script>***</script> </script>
body ===== <script>***</script>
***********footer_sticky******** Header ===== <script>***</script>
Body ===== <!-- /21952429235,22902988476/be_augdamp_footer_sticky --> <div id='div-gpt-ad-1692862484432-0' style='min-width: 728px; min-height: 90px;'> <script>***</script> </div>
|
放置广告的多种情况
首先想到的是在html文件里直接放入广告代码,但是有时候一个网页里需要多次放入广告且放置位置不好确定。例如现在网页里有个游戏列表,需要你在游戏列表里每隔9个游戏就插入一个广告。这时我们就要用到js来插入像adx.txt的广告代码(暂且不考虑请求方式),用动态生成广告div的方式放置广告则会根据游戏个数生成对应的广告盒子。另一种方式就是延续html文件里直接放入广告代码的方法。提前算好有多少个游戏,需要多少个广告盒。然后根据广告盒子动态插入其他队列。
动态生成广告div
缺点:需要考虑js脚本的运行顺序,不然会出现生成好没法自己请求广告的情况
1 2 3
| let ndiv = document.createElement('div');// 设置类名和数据属性 ndiv.className = 'gptslot'; ndiv.setAttribute('data-adunitid', `${tag}`); //tag为广告标签 0,1,2,4?看上面的adx.txt插入代码
|
上面这样就动态生成一个广告了。但是游戏列表总个数不唯一不是?所以下面就要进行遍历处理一下,设一个父div(class为InView
,id为inview
),该div下放置gamebox和gptslot。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| const batchSize = 9; //每九个 const list = GAME_DATA.list; //游戏列表数据 const inviewnode = document.getElementById('inview') //放置游戏列表和广告gptslot的父节点 for (let i = 0; i < list.length; i += batchSize) { // 创建每9个游戏的父容器元素 let parentDiv = document.createElement('div'); parentDiv.id = 'gamebox' + (i / batchSize); parentDiv.className = 'gamebox'; //动态插入广告 let ndiv = document.createElement('div');// 设置类名和数据属性 ndiv.className = 'gptslot'; ndiv.setAttribute('data-adunitid', `${i % 3}`);
inviewnode.appendChild(ndiv);
inviewnode.appendChild(parentDiv);
// 提取当前批次的元素,使用 slice() 方法 const batch = list.slice(i, i + batchSize);
// 调用buildChildDiv()生成gamebox内容,自定义 buildChildDiv(batch, parentDiv.id, "productRow");
}
|
附:CSS样式
1 2 3 4 5 6 7 8 9 10 11 12 13
| .gptslot { width: 100%; height: auto; }
.InView { width: 100%; height: auto; } .InView .gamebox { <!-- 可以自己调整 --> }
|
根据广告div动态插入其他队列
缺点:需要提前算需要多少个广告位,需要提前在html里加入广告位置代码。
同样设一个父div(class为InView,id为inview),里面放好广告代码。
1 2 3 4 5 6 7 8 9 10
| <div class="InView" id="inview"> <div class="gptslot" data-adunitid="2"></div> <div class="gptslot" data-adunitid="3"></div> <div class="gptslot" data-adunitid="4"></div> <div class="gptslot" data-adunitid="0"></div> <div class="gptslot" data-adunitid="1"></div> <div class="gptslot" data-adunitid="2"></div> <div class="gptslot" data-adunitid="3"></div> <!-- ... --> </div>
|
然后获取gptslot
的个数,每两个gptslot
之间插一个游戏或其他队列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| const batchSize = 12; //每12个游戏 const list = GAME_DATA.list; //游戏列表数据 const inviewnode = document.getElementById('inview') //放置游戏列表和广告gptslot的父节点 const gptSlots = inviewnode.getElementsByClassName('gptslot');获取广告div
let gptIndex = 0; // 游戏盒子队列插入位置的索引
for (let i = 0; i < list.length; i += batchSize) { const batch = list.slice(i, i + batchSize); // 创建父容器元素 let parentDiv = document.createElement('div'); parentDiv.id = 'gamebox' + (i / batchSize + 1); parentDiv.className = 'gamebox';
if (gptIndex < gptSlots.length) { // 插入游戏盒子队列到<div class="gptslot" data-adunitid=""></div>之后 inviewnode.insertBefore(parentDiv, gptSlots[gptIndex].nextSibling); } else { // 如果gptSlots不足,将父容器元素插入到末尾 inviewnode.appendChild(parentDiv); }
// 调用buildChildDiv()生成id为gamebox(i / batchSize + 1)内容,自定义 buildChildDiv(batch, parentDiv.id, "chlid"); gptIndex++; // 更新游戏盒子队列插入位置的索引 }
|