2011-02-19 138 views
1

如果用戶安裝了某種廣告攔截器,廣告攔截器當然會從我的網站上刪除所有廣告,並且會留下廣告曾經存在的空白空間。我想通過在其中添加一些其他內容來使用該空白空間,例如鏈接到我網站的最重要頁面,以便我需要檢測AdSense JavaScript是否已加載。如何檢測我的AdSense廣告是否被屏蔽?

的方法,我到目前爲止已經試過:

if (!document.getElementById("google_ads_frame1")) 
{ 
} 

和:

if (typeof(window.google_render_ad) == "undefined") 
{ 
} 

這兩項似乎在某些情況下會失敗,例如,如果瀏覽器下載的AdSense的JavaScript文件有點慢,它會在加載AdSense代碼之前執行上述代碼,並最終隱藏甚至沒有阻止廣告的用戶的廣告。

對於如何確保我的代碼在AdSense之後運行,您有什麼建議嗎?或者其他一些檢測AdSense腳本未加載的方式?

+0

相關:http://stackoverflow.com/questions/4869154/how-to-detect-adblock-on-my-website –

回答

2

window.onload事件中運行此代碼。當頁面完成加載時觸發事件window.onload

window.onload = function() { 
    // your checks 
} 

如果你使用jQuery,使用

$(window).load(function() { 
    // your checks 
}); 
+2

您的jQuery的例子是簡寫'$ (document).ready()',它將在'window.onload'之前觸發。您可以使用jQuery通過'$(window).load(fn)'附加'window.onload'處理程序。 –

+0

@Dave Ward,哦,是的,修復。謝謝:) – Dogbert

+0

是的工作,現在我覺得很愚蠢,因爲之前不問這個問題:) –

0

一些測試,我意識到,我以前認爲問題不在於時機的把握之後。問題在於AdSense開始使用一些新代碼,該代碼沒有「google_render_ad」功能,也沒有創建ID爲「google_ads_frame1」(新ID爲「aswift_0」)的iframe。 考慮到的AdSense現在使用至少兩個不同的ID爲I幀我做的,不論其ID的只是IFRAME元素的存在檢查新的檢測代碼:

if (document.getElementsByTagName("iframe").length === 0) 
{ 
    // ad is blocked 
} 
+3

請注意,如果你使用的是FB Like,Gplus +1或類似的,你會在頁面上有很多的iframe。 – Omiod

3

如果使用新的AdSense代碼,你可以做一個簡單的檢查,而不訴諸內容或CSS檢查。

投放廣告的正常您的標記:

(調用 adsbygoogle.js腳本的時候注意不要使用 "async"標誌)
<ins class="adsbygoogle" style="display: block;" 
    data-ad-client="ca-pub-######" 
    data-ad-slot="#######" 
    data-ad-format="auto"></ins> 
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script> 

然後調用你的頁面的底部 AdSense代碼:

<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> 

再加入低於這個代碼小片段:

<script> 
if (!adsbygoogle.loaded) { 
    // do something to alert the user 
} 
</script> 

加載廣告時,AdSense始終會創建/設置標記adsbygoogle.loadedtrue。您可以將支票放置在setTimeout函數中以延遲檢查幾秒鐘。

+1

這應該是upvoted的答案。提及setTimeout的榮譽。更好的辦法是把setTimeout放在'$(document).ready()'的內部。 –

1

這種超輕量級的方法似乎是無懈可擊的,對所有廣告網絡都是不可知的。

撥打電話廣告。JS在你的根文件夾,並添加這一行裏面:

var can_run_ads = true; 

的Adblock不會允許一個名爲ads.js要加載的文件。所以,僅僅</body>

<script src="/ads.js"></script> 
<script> 
if(window.can_run_ads === undefined) { 
    alert('Please Disable Adblock, ****** ******!'); 
} 
</script>'; 

我強烈建議將用戶重定向到具有如何卸下的Adblock指令的頁面之前把這個代碼。

1

我建議你使用FuckAdBlock來檢測AdBlock是否被激活。如果是這種情況,您可以自由地在您想要的頁面中添加儘可能多的html。

見實例文檔:https://github.com/sitexw/FuckAdBlock