2012-02-07 102 views
3

我有一個執行很多的iframe,其中的目標大多是會員網絡頁面(即執行重定向到商店等)內部重定向的頁面,標記看起來像:Adblock阻止了iframe重定向 - 如何檢測?

http://jsfiddle.net/HPDNC/2/

正如你可以看到,如果您啓用了廣告攔截器,則iframe無法加載。我需要以某種方式檢測,以便我們可以直接重定向或至少告知用戶情況。

正常的方法是簡單地檢查廣告,或者在廣告攔截器處於活動狀態時不檢測什麼。不幸的是,在這個頁面上沒有實際的廣告來檢查

回答

2

您可以使用廣告攔截器來檢測您的網站是否被訪問過。在<head>標籤 - 或任何地方真的 - 把這個:

<script type="text/javascript"> 
window.ADS_BLOCKED = true; 
</script> 
<script type="text/javascript" src="/advertise/detect.js"></script> 
<script type="text/javascript"> 
if (window.ADS_BLOCKED) 
    alert('You blocked me...'); 
</script> 

包含的JavaScript detect.js將設置window.ADS_BLOCKEDfalse。廣告攔截器會阻止該文件因其文件名(「advertise」)而被加載。

+1

您正在依靠非常粗略的規模工作的廣告攔截器。某些系統(例如Peerblock)具有已知廣告網站的列表,並直接阻止網站。其他系統處理元素名稱。你不能保證每個系統都能以這種方式工作。有些會,但不是全部。 – 2012-02-07 11:10:30

+0

類似的東西已經出現在我的腦海裏,但由於@ dawmail333提到的原因,這將是我的最後手段 – Hannes 2012-02-07 11:26:38

0

給iframe一個id,然後你可以使用javascript檢查iframe的存在。

下面是一個例子:

<script type="text/javascript"> 

if(document.getElementById("ad") == null) { 
    alert("The ad has been removed!"); 
} 
else 
{ 
    alert("It's alright, it's still here."); 
} 

</script> 

編輯:只是固定的錯誤。

這樣做是爲Javascript提供了一種訪問您的廣告元素的方式。後面的代碼(if(document.getElementById("ad") == null))只是檢查元素是否存在 - 如果不存在,則表示adblocker已將其刪除。

某些adblockers(就像早期版本的AdBlock for Chrome)只是隱藏了元素,而不是將其刪除 - 我將其留作練習,因爲我只檢查過DOM元素的CSS通過JQuery。

編輯2:

使用這個答案here,你可以簡單地檢查是否在iframe的HTML正確加載,並回應基於這一點。

+0

addblock不會破壞iframe - 但只是在iframe內停止請求,所以它會作爲父級內的元素存在記錄最新消息 – Hannes 2012-02-07 11:24:41

+0

好的,我會看看我是否能在那之後找到解決方案。 – 2012-02-07 11:54:20

+0

@Hannes我更新了答案,看看它是否更合適。 – 2012-02-08 04:07:34