Чи можливо використовувати асинхронний google adsense, тобто неблокуючий?


Відповіді:


6

це робить:

<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> 

дивіться цей елемент блогу " Google Ads Async (asynchronous) ", в основному я знайшов спосіб змусити код реклами запустити асинхронізацію.


1
+1 за розумне рішення, яке надається за посиланням. Це дуже цікаво, як він створює резервну копію стандарту document.write functionта відновлює його згодом. Єдиним недоліком є ​​те, що мені цікаво, чи дозволяють Google Adsense TOS робити такі речі?
Марко Демайо

+1 для ідеї, я приймаю її і змушую її трохи попрацювати і розміщую її тут. Мені не вдалося змусити цю GS_googleAddAdSenseService працювати з іншою ідеєю.
Арістос

5

Так, є спосіб - за допомогою iframes. Ми здійснюємо асинхронне завантаження рекламного контенту на одному з сайтів нашого замовника.

Спочатку ви повинні зв’язатися з Google для підтримки їхніх оголошень у iframes (які не були широко доступні ще коли ми створили цей сайт). Потім ви можете використовувати JavaScript, щоб запустити завантаження вмісту iframe AdSense, що ми і робимо.

Рішення дійсно прямо вперед, коли у вас є підтримка iframe від Google.

Редагувати: Схоже - з публікацій, на які посилається Virtuosi Media - ця практика може бути не вітається Google ...

Редагувати 2: Це код, який ми використовуємо в iframe. Спробуйте перевірити, чи працює вона, можливо, навіть не вимагаючи від Google підтримки. type="text/javascript" language="JavaScript"Для більшої розбірливості видалено :

<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>

Ми заповнюємо всі наші слоти за допомогою ідентифікаторів рекламного блоку, тому ми не бачимо PSA.


1
Чи можете ви надати більш детальну інформацію про контакт з Google щодо цього? Я нічого не бачу про це у своєму акаунті AdSense.
Virtuosi Media

Крім того, мені буде цікаво дізнатися, чи рекламні блоки все ще показують відповідні оголошення або лише PSA та як ви вирішили цю проблему.
Virtuosi Media

Насправді ми заповнюємо всі наші слоти за допомогою ідентифікаторів рекламного блоку, тому ми не бачимо ніяких PSA.
Олівер

при використанні цього методу я отримую GA_googleFillSlotWithSize не визначена помилка
Тимо Хуовінен

@YuriKolovsky: схоже, сценарій Google не завантажується належним чином. Дивіться мою редакцію 2: можливо, вам потрібно буде подати заявку на цей метод у Google.
Олівер

2

Наразі вони не пропонують такий варіант, наскільки я бачу. Вашим найкращим варіантом, якби це дозволив Google TOS, було б використовувати елемент-заповнювач і динамічно замінити його JavaScript після завантаження сторінки. Однак, схоже, це може бути проти TOS. Дивіться цю тему для більш детальної інформації.


2

Ви можете скористатися заповнювачем місця, зателефонувати в код Adsense, а потім перемкнути його на рекламу. Я використовую щось подібне на своєму сайті:

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

Google навіть рекомендує робити це, коли вони кажуть, що ви в першу чергу у своєму HTML-коді маєте займати найважливішу позицію оголошення. Якщо ви хочете досягти цього, вам доведеться використовувати JS або CSS для переміщення менш важливих рекламних блоків на (візуальну) верхню частину сторінки.

Наскільки я знаю, AdSense вже показує рекламу асинхронно. Я лише дуже рідко бачив, як це блокує завантаження сторінок. Не впевнений у цьому, хоча.


0

Оскільки google каже: "дозволяє зробити Інтернет швидшим", я міняю вищевказаний код, щоб завантажувати google-оголошення лише тоді, коли вони відображаються. Код - це робота "як є" лише для однієї реклами на сайті Google, але я думаю, що ви можете легко змінити її для отримання більшої кількості оголошень. Різні з іншим кодом є

  • Завантажуйте рекламу лише в тому випадку, якщо користувач бачить їх
  • Завантажуйте оголошення та розміщуйте їх у розділі (не в кінці сторінки)
  • Працює з усіма браузерами, тому що я завантажую всі необхідні елементи (не тільки перший)

Починаючи з того, divщо я розміщую рекламу пізніше.

<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>

У мене є тест і я працюю з усіма браузерами, я просто використовую jQuery, щоб бути більш безпечним, що мені важко уникнути браузерів.

ps, я створив подібний код для завантаження google plus, а також фейсбук і всі ті елементи, які завантажуються без причини, більшість разів.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.