Apakah mungkin menggunakan asinkron google adsense, yaitu non-blocking?

Jawaban:

6

ini melakukannya:

<script type="text/javascript"><!--
// dynamically Load Ads out-of-band
setTimeout((function ()
{
    // placeholder for ads
        var eleAds = document.createElement("ads");  
        // dynamic script element
        var eleScript = document.createElement("script");  
        // remember the implementation of document.write function
        w = document.write;
        // override and replace with our version
        document.write = (function(params)
        {
        // replace our placeholder with real ads
        eleAds.innerHTML = params;
        // put the old implementation back in place
        // Aristos, add this check because called more than ones
        //  and ends, with this symbol.
        if(params.indexOf("</ins>") != -1)
            document.write=w;
        });
        // setup the ads script element
        eleScript.setAttribute("type", "text/javascript");
        eleScript.setAttribute("src", "http://pagead2.googlesyndication.com/pagead/show_ads.js");
        // add the two elements, causing the ads script to run
        document.body.appendChild(eleAds);              
        document.body.appendChild(eleScript);           
}), 1);
                //-->
        </script> 

lihat item blog ini " Google Ads Async (asynchronous) " pada dasarnya saya telah menemukan cara untuk mendapatkan kode iklan yang benar-benar berjalan async ..

Figment Engine
sumber
1
+1 untuk solusi cerdas yang disediakan di tautan. Sangat menarik cara mem-backup standar document.write functiondan mengembalikannya nanti. Satu-satunya downside adalah bahwa saya bertanya-tanya apakah Google Adsense TOS memungkinkan untuk melakukan hal semacam ini?
Marco Demaio
+1 untuk idenya, saya ambil dan membuatnya bekerja sedikit lebih baik dan posting di sini. Saya gagal membuat GS_googleAddAdSenseService ini berfungsi dengan ide lain.
Aristos
5

Ya, ada cara - menggunakan iframe. Kami melakukan pemuatan konten iklan yang tidak sinkron di salah satu situs pelanggan kami.

Pertama-tama Anda harus menghubungi Google untuk mendukung iklan mereka di iframe (yang tidak tersedia secara luas saat kami membuat situs itu). Anda kemudian dapat menggunakan JavaScript untuk memicu pemuatan konten iframe AdSense, yang kami lakukan.

Solusinya benar-benar lurus ke depan setelah Anda memiliki dukungan iframe Google.

Sunting: Sepertinya - dari pos yang dirujuk oleh Virtuosi Media - praktik ini mungkin tidak disambut oleh Google ...

Sunting 2: Ini adalah kode yang kami gunakan di iframe. Cobalah untuk melihat apakah itu berfungsi, mungkin bahkan tanpa meminta dukungan Google secara khusus. Dihapus type="text/javascript" language="JavaScript"untuk keterbacaan yang lebih baik:

<head runat="server">
    <script src="http://partner.googleadservices.com/gampad/google_service.js">
    </script>

    <script>
        GS_googleAddAdSenseService("ca-pub-YOURKEY");
        GS_googleEnableAllServices();
    </script>

    <!-- For this method, it is not necessary to define the slots in advance 
         and we do not use the FetchAds function -->
    <script>
        GA_googleUseIframeRendering(true);    //<%-- This indicates iframe rendering for all slots --%>
    </script>
</head>
<body>
    <form id="formAd" runat="server">
        <div>
            <script>
                GA_googleFillSlotWithSize("ca-pub-YOURKEY", "AdSlotId",
                                          iframeWidth, iframeHeight);
            </script>
        </div>
    </form>
</body>

Kami mengisi semua slot kami melalui id adslot, jadi kami tidak melihat ILM apa pun.

Oliver
sumber
1
Bisakah Anda memberikan detail lebih lanjut tentang cara menghubungi Google tentang hal ini? Saya tidak melihat apa pun di akun AdSense saya.
Virtuosi Media
Saya juga ingin tahu apakah unit iklan masih menayangkan iklan yang relevan atau hanya PSA dan bagaimana Anda mengatasi masalah itu.
Virtuosi Media
Sebenarnya, kami mengisi semua slot kami melalui id adslot, jadi kami tidak melihat ILM.
Oliver
saat menggunakan metode ini, saya mendapatkan GA_googleFillSlotWithSize bukan kesalahan yang didefinisikan
Timo Huovinen
@YuriKolovsky: sepertinya skrip Google tidak dimuat dengan benar. Lihat Edit 2 saya: Anda mungkin perlu menerapkan metode ini dengan Google.
Oliver
2

Sejauh ini mereka tidak menawarkan opsi, sejauh yang saya bisa lihat. Opsi terbaik Anda, jika diizinkan oleh TOS Google, akan menggunakan elemen placeholder dan menggantinya secara dinamis dengan JavaScript setelah halaman dimuat. Namun, tampaknya seolah-olah itu bertentangan dengan TOS. Lihat utas ini untuk lebih jelasnya.

Virtuosi Media
sumber
2

Anda dapat menggunakan placeholder, memanggil kode Adsense dan kemudian mengganti placeholder dengan iklan. Saya menggunakan sesuatu seperti ini di situs saya:

if ( ad1 = document.getElementById('ad-top') )
{
    ad2 = document.getElementById('banner_tmp468');
    ad1.appendChild(ad2);
    ad2.style.display = 'block';
}

Google bahkan merekomendasikan melakukan ini ketika mereka mengatakan bahwa Anda harus memiliki posisi iklan paling penting terlebih dahulu dalam kode HTML Anda. Jika Anda ingin mencapainya, Anda harus menggunakan JS atau CSS untuk memindahkan unit iklan yang kurang penting ke bagian (visual) halaman Anda.

Tetapi sejauh yang saya tahu AdSense sudah membuat iklan secara tidak sinkron. Saya jarang melihatnya memblokir pageloading. Tidak yakin tentang ini.


sumber
0

Karena google mengatakan "mari buat web lebih cepat" Saya mengubah kode di atas untuk memuat iklan google hanya ketika mereka terlihat. Kode ini berfungsi "sebagaimana adanya" hanya untuk satu iklan tempat google, tetapi saya pikir Anda dapat dengan mudah memodifikasinya untuk lebih banyak iklan. Berbeda dengan kode lainnya

  • Muat iklan hanya jika terlihat oleh pengguna
  • Muat iklan dan letakkan di div (bukan di akhir halaman)
  • Bekerja dengan semua browser karena saya memuat semua item yang dibutuhkan (tidak hanya yang pertama)

Dimulai dengan diviklan yang saya tempatkan nanti.

<div id="adSpot" ></div>

<script type="text/javascript">
    // load the script with cache
    function getScriptCcd(url, callback)
    {
        jQuery.ajax({
                type: "GET",
                url: url,
                success: callback,
                dataType: "script",
                cache: true
        });
    };

    // to unbind the scroll I keep the total binds of scroll
    // in this example I have only one.
    var cPosaScrollExo = 0;
    // bind the scrool to monitor if ads are visible    
    function addThisScroll(RunThisFunction)
    {
        jQuery(window).scroll(RunThisFunction);
        cPosaScrollExo++;
    }
    // unbind all scroll if all they not needed any more
    function unBindScroll()
    {
        cPosaScrollExo--;

        if(cPosaScrollExo <= 0)
        {
            cPosaScrollExo = 0;
            jQuery(window).unbind('scroll');
        }
    }

    // here I check if the element is visible to the user with a 100pixel advanced.
    function isScrolledOnMatia(pioSimio) 
    {
        var SimioPouTheloNaFenete = (jQuery(pioSimio).offset().top - 100 );
        var scrollPosition = jQuery(window).height() + jQuery(window).scrollTop();

        return (scrollPosition >= SimioPouTheloNaFenete );
    }   

    // the ads informations
    google_ad_client = "pub-XXXXXXXXXXXXXXX";
    google_ad_slot = "XXXXX";
    google_ad_width = 468;
    google_ad_height = 60;

    var GoogleIsVisible = false;
    // we call this function on every window scroll
    function CheckAdsVisibility()
    {
        if(!GoogleIsVisible)
        {
            if(isScrolledOnMatia("#adSpot"))
            {
                unBindScroll();
                GoogleIsVisible = true;

                            // finally I go to show the ads
                LoadAdsLater();
            }
        }
    }

    // here is a modification of the function that load the ads
    function LoadAdsLater()
    {
        try
        {
                    // Aristos: nice trick here 
            // remember the implementation of document.write function
            w = document.write;

            // override and replace with our version
            document.write = (function(params)
            {
                jQuery("#adSpot").append(params);

                // put the old implementation back in place when
                            //  all writes are finish
                if(params.indexOf("</ins>") != -1)
                    document.write=w;
            });             

            // loading script
            getScriptCcd("http://pagead2.googlesyndication.com/pagead/show_ads.js");
        }
        catch(e)
        {
            // check for errors on debug
        }
    }

    // and here we setup the hole thin
    jQuery(document).ready(function() 
    {       
            // check if all ready is visible !
        CheckAdsVisibility();
            // bind the scroll
        addThisScroll(CheckAdsVisibility);
    });
</script>

Saya telah mengujinya dan bekerja dengan semua browser, saya hanya menggunakan jQuery agar lebih aman bahwa saya menghindari browser yang sulit.

ps, saya telah membuat kode yang sama untuk memuat google plus, dan facebook dan semua item yang memuat dengan alasan paling sering.

Aristos
sumber
0

Tidak perlu lagi melakukan ini. Show_ads.js Google AdSense sekarang agak tidak sinkron. Anda dapat membaca lebih lanjut tentang detail berdarah di blog resmi:

Web Anda, Setengah Detik Lebih Cepat

Tidak perlu mengubah kode iklan.

Salman A
sumber