我希望将Google AdSense广告纳入responsive design(特别是使用Twitter Bootstrap)。
挑战在于,通过响应式设计,容器的宽度可以根据浏览器窗口的宽度而变化。虽然这是响应式设计的主要优势之一,但是很难适应固定宽度的内容,例如广告。例如,对于使用至少1200px宽的浏览器查看页面的用户,给定容器可以是300px宽。但是在768px宽的浏览器窗口中,同一容器可能只有180px宽。
我正在寻找JavaScript(jQuery?)解决方案来加载适合容器宽度的最大广告格式。
假设我有以下广告位(广告格式):
name width x height slot_id
slot_180 180 x 160 1234567890
slot_250 250 x 250 2345678901
slot_300 300 x 250 3456789012
slot_336 336 x 280 4567890123
slot_728 728 x 90 5678901234
这是我需要包含的脚本:
<script type="text/javascript"><!--
google_ad_client = "ca-ABCDEFGH";
google_ad_slot = "[###slot_id###]";
google_ad_width = [###width###];
google_ad_height = [###height###];
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>';
这里有一些示例html:
<body>
<div class="row">
<div class="span3"><p>Lorem ipsum</p></div>
<div class="span3" id="adSlot1"><!-- [### INSERT AD 1 HERE ###] --></div>
<div class="span3"><p>Lorem ipsum</p></div>
<div class="span3"><p>Lorem ipsum</p></div>
</div>
<div class="row">
<div class="span4" id="adSlot2"><!-- [### INSERT AD 2 HERE ###] --></div>
<div class="span4"><p>Lorem ipsum</p></div>
<div class="span4" id="adSlot3"><!-- [### INSERT AD 3 HERE ###] --></div>
</div>
</body>
我想展示适合给定容器的最大广告位。
例如:
如果#adSlot1的宽度为300px,那么让我们在AdSense JavaScript中显示slot_300
(或者更确切地说是ID:3456789012
及其宽度和高度。)
现在假设您在另一台设备上查看该页面,#adSlot1现在是480px宽。现在让我们使用slot_336
。 1000px宽元素?使用slot_728
。得到它?
请注意,根据宽度,提交所有不同的广告位并且.show()
/ .hide()
仅针对Google的TOS。相反,如果广告JavaScript被调用,它必须在页面上可见。 (想象一下,如果将隐藏的广告计算为展示次数,这会如何搞砸每个人的报告!)
我也不太关心在页面浏览期间拉伸和缩小浏览器窗口的人。但是,如果有一个精明的答案,奖励积分。在此之前,这可以在每页加载时加载一次。
你认为最好,最优雅的方法是什么?
答案 0 :(得分:6)
AdSense不支持流体宽度(不是我所知道的),但您可以提供服务 不同的大小取决于使用JavaScript的实际容器大小。
看看这个:
http://james.cridland.net/code/dynamic_google_adsense.html
修改强>
如果您解释了如何使用上述链接中的示例,将会很有帮助。
这是一个更详细的例子,作为一个理论上应该工作的jQuery插件。
var google_ad_slot, google_ad_width, google_ad_height;
(function( $ ){
$.fn.google_ads = function(slots) {
/* Sort slots by width descending */
slots.sort(function(a, b){
var a1 = a[0], b1 = b[0];
if(a1 == b1) return 0;
return a1 > b1? -1: 1;
});
return this.each(function(){
/* Get slot container width */
var width = $(this).width();
/* Find fitting slot */
var slot = null;
$.each(slots, function(){
slot = this;
if(width >= slot[0]){
return false;
}
});
if( slot !== null ){
/* Set global variables for external script */
google_ad_slot = slot[2];
google_ad_width = slot[0];
google_ad_height = slot[1];
/* Append script to slot container */
var script_el = $('<script>', {
'type': 'text/javascript',
'src': 'http://pagead2.googlesyndication.com/pagead/show_ads.js'
}).on('load', function() {
/* May need to wait with next slot until script is loaded */
console.log('loaded');
});
$(this).append(script_el);
}
});
};
})( jQuery );
示例用法 [宽度,高度,槽]
<h2>Slot 1</h2>
<div id="slot-1" class="slot" style="width:300px;"></div>
<h2>Slot 2</h2>
<div id="slot-2" class="slot" style="width:400px;"></div>
<script type="text/javascript">
var google_ad_client = "ca-pub-527527527527527";
$('.slot').google_ads([
[180, 160, 1234567890],
[250, 250, 2345678901],
[300, 250, 3456789012],
[336, 280, 4567890123],
[728, 90, 5678901234]
]);
</script>
更有可能(和更丑陋)的成功方式是:
<script type="text/javascript">
var get_google_ad_params = function(width, slots){
/* Sort slots by width descending */
slots.sort(function(a, b){
var a1 = a[0], b1 = b[0];
if(a1 == b1) return 0;
return a1 > b1? -1: 1;
});
/* Find fitting slot */
var slot = null;
$.each(slots, function(){
slot = this;
if(width >= slot[0]){
return false;
}
});
return slot;
};
var slots = [
[180, 160, 1234567890],
[250, 250, 2345678901],
[300, 250, 3456789012],
[336, 280, 4567890123],
[728, 90, 5678901234]
];
</script>
<h2>Slot 1</h2>
<div id="slot-1" class="slot" style="width:300px;">
<script type="text/javascript">
var params = get_google_ad_params($('#slot-1').width(), slots);
var google_ad_slot = params[2];
var google_ad_width = params[0];
var google_ad_height = params[1];
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
<h2>Slot 2</h2>
<div id="slot-2" class="slot" style="width:400px;">
<script type="text/javascript">
var params = get_google_ad_params($('#slot-2').width(), slots);
var google_ad_slot = params[2];
var google_ad_width = params[0];
var google_ad_height = params[1];
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
答案 1 :(得分:2)
这可能看起来有点简陋,特别是与Sunn0的答案相比,但是这个简单的事情呢?
function findAd(){
$('.adSlot').each(function(){
var adSlotWidth = $(this).width();
if(adSlotWidth >= 728){
$(this).html(/* GOOGLE AD */);
} else if(adSlotWidth >= 336 && adSlotWidth <= 727){
$(this).html(/* GOOGLE AD */);
} else if(adSlotWidth >= 300 && adSlotWidth <= 335){
$(this).html(/* GOOGLE AD */);
} else if(adSlotWidth >= 250 && adSlotWidth <= 299){
$(this).html(/* GOOGLE AD */);
} else{
$(this).html(/* GOOGLE AD */);
}
});
}
$(document).ready(function(){
findAd();
$(window).resize(function(){
findAd();
});
});
编辑以包含代码
答案 2 :(得分:0)
你应该可以在窗口调整大小上调用sunn0的插件,并让它也能响应。你应该考虑限制resize事件。这是一篇很好的帖子。
http://paulirish.com/2009/throttled-smartresize-jquery-event-handler/