<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>
Siehe diesen Blog-Artikel " Google Ads Async (asynchronous) ". Im Grunde habe ich einen Weg gefunden, den Anzeigencode so zu gestalten, dass er wirklich asynchron ausgeführt wird.
+1 für die im Link bereitgestellte intelligente Lösung. Es ist sehr interessant, wie der Standard document.write functiongesichert und später wiederhergestellt wird. Der einzige Nachteil ist, dass ich mich frage, ob Google Adsense TOS solche Dinge zulässt.
Marco Demaio
+1 für die Idee, ich nehme es und lasse es ein bisschen besser funktionieren und poste es hier. Ich kann diesen GS_googleAddAdSenseService nicht mit der anderen Idee zum Laufen bringen.
Aristos
5
Ja, es gibt einen Weg - Iframes zu verwenden. Wir laden Anzeigeninhalte asynchron auf einer der Websites unserer Kunden.
Sie müssen sich zuerst an Google wenden, um Unterstützung für deren Anzeigen in Iframes zu erhalten (die bei der Erstellung dieser Website noch nicht allgemein verfügbar waren). Sie können dann JavaScript verwenden, um das Laden des AdSense-Iframe-Inhalts auszulösen. Dies tun wir.
Die Lösung ist wirklich einfach, sobald Sie die iframe-Unterstützung von Google haben.
Bearbeiten: Aus den von Virtuosi Media referenzierten Beiträgen geht hervor, dass diese Vorgehensweise von Google möglicherweise nicht begrüßt wird ...
Edit 2:
Dies ist der Code, den wir im iframe verwenden. Probieren Sie es aus, um zu sehen, ob es funktioniert, vielleicht sogar ohne Google ausdrücklich um Unterstützung zu bitten. Zur type="text/javascript" language="JavaScript"besseren Lesbarkeit entfernt:
<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>
Wir füllen alle unsere Slots mit Adslot-IDs, sodass wir keine Haftklebemassen sehen.
Können Sie weitere Informationen zur Kontaktaufnahme mit Google geben? In meinem AdSense-Konto wird nichts darüber angezeigt.
Virtuosi Media
Außerdem wäre ich gespannt, ob die Anzeigenblöcke noch relevante Anzeigen oder nur PSAs liefern und wie Sie dieses Problem umgangen haben.
Virtuosi Media
Tatsächlich füllen wir alle unsere Slots mit Adslot-IDs, sodass wir keine Haftklebemassen sehen.
Oliver
Bei Verwendung dieser Methode erhalte ich GA_googleFillSlotWithSize ist kein Fehler definiert
Timo Huovinen
@YuriKolovsky: Es sieht so aus, als würde Googles Skript nicht richtig geladen. Siehe meine Bearbeitung 2: Möglicherweise müssen Sie diese Methode bei Google beantragen.
Oliver
2
Sie bieten derzeit keine Option an, soweit ich sehen kann. Wenn dies nach den Nutzungsbedingungen von Google zulässig wäre, hätten Sie am besten ein Platzhalterelement verwendet und es nach dem Laden der Seite dynamisch durch JavaScript ersetzt. Es scheint jedoch, als ob es gegen die AGB sein könnte. Weitere Informationen finden Sie in diesem Thread .
Sie können einen Platzhalter verwenden, den Adsense-Code aufrufen und dann den Platzhalter mit der Anzeige wechseln. Ich verwende so etwas auf meiner Website:
Google empfiehlt dies sogar, wenn angegeben wird, dass Sie Ihre wichtigste Anzeigenposition zuerst in Ihrem HTML-Code haben sollten. Wenn Sie dies erreichen möchten, müssen Sie JS oder CSS verwenden, um weniger wichtige Anzeigenblöcke an den (visuellen) oberen Rand Ihrer Seite zu verschieben.
Soweit ich weiß, rendert AdSense Anzeigen jedoch bereits asynchron. Ich habe nur sehr selten gesehen, wie es das Seitenladen blockiert. Ich bin mir jedoch nicht sicher.
Da Google sagt "Lasst uns das Web schneller machen", ändere ich den obigen Code, um die Google-Anzeigen nur dann zu laden, wenn sie sichtbar sind. Der Code funktioniert "wie er ist" nur für eine Google Place-Anzeige, aber ich denke, Sie können ihn für weitere Anzeigen einfach ändern. Die Unterschiede mit dem anderen Code sind
Anzeigen werden nur geladen, wenn sie für den Nutzer sichtbar sind
Lädt Anzeigen und platziert sie auf einem Div (nicht am Ende der Seite)
Funktioniert mit allen Browsern, da ich alle benötigten Elemente lade (nicht nur die ersten).
Beginnend mit dem, divdass ich die Anzeigen später platziere.
<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>
Ich habe es getestet und arbeite mit allen Browsern. Ich benutze nur jQuery, um sicherer zu sein, dass ich Browser nur schwer vermeiden kann.
ps, ich habe ähnlichen Code zum Laden von Google Plus und Facebook und all den Elementen erstellt, die die meiste Zeit ohne Grund geladen werden.
Es besteht keine weitere Notwendigkeit, dies zu tun. Die show_ads.js von Google AdSense sind jetzt etwas asynchron. Weitere Informationen zu den wichtigsten Details finden Sie im offiziellen Blog:
document.write function
gesichert und später wiederhergestellt wird. Der einzige Nachteil ist, dass ich mich frage, ob Google Adsense TOS solche Dinge zulässt.Ja, es gibt einen Weg - Iframes zu verwenden. Wir laden Anzeigeninhalte asynchron auf einer der Websites unserer Kunden.
Sie müssen sich zuerst an Google wenden, um Unterstützung für deren Anzeigen in Iframes zu erhalten (die bei der Erstellung dieser Website noch nicht allgemein verfügbar waren). Sie können dann JavaScript verwenden, um das Laden des AdSense-Iframe-Inhalts auszulösen. Dies tun wir.
Die Lösung ist wirklich einfach, sobald Sie die iframe-Unterstützung von Google haben.
Bearbeiten: Aus den von Virtuosi Media referenzierten Beiträgen geht hervor, dass diese Vorgehensweise von Google möglicherweise nicht begrüßt wird ...
Edit 2: Dies ist der Code, den wir im iframe verwenden. Probieren Sie es aus, um zu sehen, ob es funktioniert, vielleicht sogar ohne Google ausdrücklich um Unterstützung zu bitten. Zur
type="text/javascript" language="JavaScript"
besseren Lesbarkeit entfernt:Wir füllen alle unsere Slots mit Adslot-IDs, sodass wir keine Haftklebemassen sehen.
quelle
Sie bieten derzeit keine Option an, soweit ich sehen kann. Wenn dies nach den Nutzungsbedingungen von Google zulässig wäre, hätten Sie am besten ein Platzhalterelement verwendet und es nach dem Laden der Seite dynamisch durch JavaScript ersetzt. Es scheint jedoch, als ob es gegen die AGB sein könnte. Weitere Informationen finden Sie in diesem Thread .
quelle
Sie können einen Platzhalter verwenden, den Adsense-Code aufrufen und dann den Platzhalter mit der Anzeige wechseln. Ich verwende so etwas auf meiner Website:
Google empfiehlt dies sogar, wenn angegeben wird, dass Sie Ihre wichtigste Anzeigenposition zuerst in Ihrem HTML-Code haben sollten. Wenn Sie dies erreichen möchten, müssen Sie JS oder CSS verwenden, um weniger wichtige Anzeigenblöcke an den (visuellen) oberen Rand Ihrer Seite zu verschieben.
Soweit ich weiß, rendert AdSense Anzeigen jedoch bereits asynchron. Ich habe nur sehr selten gesehen, wie es das Seitenladen blockiert. Ich bin mir jedoch nicht sicher.
quelle
Da Google sagt "Lasst uns das Web schneller machen", ändere ich den obigen Code, um die Google-Anzeigen nur dann zu laden, wenn sie sichtbar sind. Der Code funktioniert "wie er ist" nur für eine Google Place-Anzeige, aber ich denke, Sie können ihn für weitere Anzeigen einfach ändern. Die Unterschiede mit dem anderen Code sind
Beginnend mit dem,
div
dass ich die Anzeigen später platziere.Ich habe es getestet und arbeite mit allen Browsern. Ich benutze nur jQuery, um sicherer zu sein, dass ich Browser nur schwer vermeiden kann.
ps, ich habe ähnlichen Code zum Laden von Google Plus und Facebook und all den Elementen erstellt, die die meiste Zeit ohne Grund geladen werden.
quelle
Es besteht keine weitere Notwendigkeit, dies zu tun. Die show_ads.js von Google AdSense sind jetzt etwas asynchron. Weitere Informationen zu den wichtigsten Details finden Sie im offiziellen Blog:
Ihr Web, eine halbe Sekunde früher
Der Anzeigencode muss nicht geändert werden.
quelle