12

Google AdSense広告をレスポンシブデザインに適合させたいと考えています(特にTwitter Bootstrapを使用)。

課題は、レスポンシブデザインでは、ブラウザウィンドウの幅に応じてコンテナの幅が変わる可能性があることです。これはレスポンシブデザインの大きな強みの1つですが、広告などの固定幅のコンテンツに合わせるのは難しい場合があります。たとえば、特定のコンテナは、少なくとも1200ピクセル幅のブラウザでページを表示するユーザーのために、300ピクセル幅である可能性があります。ただし、768ピクセル幅のブラウザウィンドウでは、同じコンテナの幅は180ピクセルしかない場合があります。

コンテナの幅に合う最大の広告フォーマットをロードする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の幅が300ピクセルの場合は、表示しますslot_300(つまり、ID:3456789012AdSense JavaScriptの幅と高さとともに)。

ここで、別のデバイスでページを表示し、#adSlot1の幅が480ピクセルになったとします。それでは、を使用しましょうslot_336。1000px幅の要素?を使用しslot_728ます。それを得る?

幅に応じて、.show()すべての異なるスロットをレンダリングすることは、GoogleのTOSに反することに注意してください。.hide()代わりに、広告JavaScriptが呼び出された場合、ページに表示されている必要があります。(非表示の広告がインプレッションとしてカウントされた場合、これがすべてのレポートを台無しにすることを想像してみてください!)

また、ページ表示中にブラウザウィンドウを拡大および縮小する人々についてもそれほど心配していません。しかし、これに精通した答えがある場合はボーナスポイント。それまでは、ページの読み込みごとに1回読み込むことができます。

これを達成するための最良で最もエレガントな方法は何だと思いますか?

4

3 に答える 3

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>
于 2012-09-20T20:34:01.083 に答える
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();   
    });

});

コードを含めるための編集

于 2012-11-28T23:35:12.137 に答える
0

ウィンドウのサイズ変更時にsunn0のプラグインを呼び出して、レスポンシブでも動作させることができるはずです。ただし、サイズ変更イベントの調整を検討する必要があります。これはそれについて読むのに良い投稿です。

http://paulirish.com/2009/throttled-smartresize-jquery-event-handler/

于 2012-12-07T17:40:25.747 に答える