我知道有一种使用Google Analytics(分析)的异步方法,但是adsense是否有类似的方法?我无法从当前搜索中找到一个-我想知道我是否缺少一个常见的窍门?
我知道有一种使用Google Analytics(分析)的异步方法,但是adsense是否有类似的方法?我无法从当前搜索中找到一个-我想知道我是否缺少一个常见的窍门?
Answers:
做到了:
<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) ”,基本上我已经找到了一种使广告代码真正运行的方法。
是的,有一种方法-使用iframe。我们在客户的网站之一上异步加载广告内容。
首先,您必须与Google联系以获取iframe中广告支持的支持(当我们建立该网站时,这种支持并不广泛)。然后,您可以使用JavaScript触发AdSense iframe内容的加载,这就是我们要做的。
一旦有了Google的iframe支持,该解决方案便非常简单。
编辑:看起来-从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>
我们通过adslot ID填充了所有广告位,因此看不到任何PSA。
您可以使用占位符,调用Adsense代码,然后将占位符与广告一起切换。我在网站上使用的是这样的内容:
if ( ad1 = document.getElementById('ad-top') )
{
ad2 = document.getElementById('banner_tmp468');
ad1.appendChild(ad2);
ad2.style.display = 'block';
}
Google甚至建议这样做,因为他们说您应该在HTML代码中首先拥有最重要的广告位置。如果要完成此操作,则必须使用JS或CSS将不太重要的广告单元移动到页面的(视觉)顶部。
但是据我所知,AdSense已经异步呈现广告。我只很少看到它阻止页面加载。虽然不确定。
因为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,facebook和所有大多数原因加载的项目。
document.write function
并在以后还原它的方式非常有趣。唯一的缺点是我想知道Google Adsense TOS是否允许执行此类操作?