Чи можливо використовувати асинхронний 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.