1

ユーザーがギャラリー ビューアの各サムネイル アイコンをクリックするたびに、JavaScript の refresh() 呼び出しを使用して自動的に更新される一連の DFP 広告がページに表示されます。

googletag.pubads().refresh();

問題は、ユーザーがギャラリーをすばやくクリックすると、クリックするたびに広告が更新され続け、システムがユーザーのクリックに追いつかなくなり、最終的に空白の広告が表示される可能性があることです。

したがって、広告の読み込みが完全に終了した場合にのみ、更新を呼び出したいと思います。

スロット内の広告のロード状態を検出する方法はありますか?

当社の広告は以下を使用して定義されています。

slot_header_lge = googletag.defineSlot('/XXX/Header-Home-Large', [945, 230], 'div-gpt-ad-Header-Large').addService(googletag.pubads());

googletag.pubads().enableAsyncRendering();
googletag.pubads().collapseEmptyDivs();
googletag.enableServices();
4

1 に答える 1

3

私は DFP をラップするjquery プラグインを作成し、しばらく前にこの問題の解決策を考え出しました... 広告ユニットには renderEnded() という内部関数があり、これをフックして、広告ユニットがいつ終了したかを確認できます。レンダリングされました。

私の経験では、これは HTML コードがページに挿入されたことを意味するだけで、必ずしも広告の読み込みが完全に終了したことを意味するわけではありません。いくつかのタイムアウトをこれと組み合わせて、かなり堅牢なシステムを動作させることができます。

たとえば、私のプラグインを使用すると、次のことを試すことができます。ページの最後の広告がレンダリングされてから 5 秒後まで広告を更新できないようにする必要があります。

<!DOCTYPE html>
<html>
<head>
    <title>TEST</title>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://coop182.github.io/jquery.dfp.js/jquery.dfp.js"></script>

</head>
<body>

Test DFP Ads.

<div class="adunit" id="buyingcars_ATF_728x90" data-dimensions="728x90"></div>

<script>

    var adsLoaded = true;

    function checkLoading() {

        console.log('Checking...');

        if (adsLoaded) {
            loadAds();
        }
    }

    function loadAds() {

        console.log('Loading...');

        adsLoaded = false;

        $.dfp({
            dfpID: '3853655',
            afterAllAdsLoaded: function() {
                setTimeout(function(){adsLoaded = true;}, 5000);
            }
        });
    }

    checkLoading();

</script>

<a href="#" onclick="checkLoading();">Refresh</a>

</body>
</html>
于 2013-09-25T01:48:24.600 に答える