我有一個執行很多的iframe,其中的目標大多是會員網絡頁面(即執行重定向到商店等)內部重定向的頁面,標記看起來像:Adblock阻止了iframe重定向 - 如何檢測?
正如你可以看到,如果您啓用了廣告攔截器,則iframe無法加載。我需要以某種方式檢測,以便我們可以直接重定向或至少告知用戶情況。
正常的方法是簡單地檢查廣告,或者在廣告攔截器處於活動狀態時不檢測什麼。不幸的是,在這個頁面上沒有實際的廣告來檢查。
我有一個執行很多的iframe,其中的目標大多是會員網絡頁面(即執行重定向到商店等)內部重定向的頁面,標記看起來像:Adblock阻止了iframe重定向 - 如何檢測?
正如你可以看到,如果您啓用了廣告攔截器,則iframe無法加載。我需要以某種方式檢測,以便我們可以直接重定向或至少告知用戶情況。
正常的方法是簡單地檢查廣告,或者在廣告攔截器處於活動狀態時不檢測什麼。不幸的是,在這個頁面上沒有實際的廣告來檢查。
您可以使用廣告攔截器來檢測您的網站是否被訪問過。在<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_BLOCKED
到false
。廣告攔截器會阻止該文件因其文件名(「advertise」)而被加載。
給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正確加載,並回應基於這一點。
addblock不會破壞iframe - 但只是在iframe內停止請求,所以它會作爲父級內的元素存在記錄最新消息 – Hannes 2012-02-07 11:24:41
好的,我會看看我是否能在那之後找到解決方案。 – 2012-02-07 11:54:20
@Hannes我更新了答案,看看它是否更合適。 – 2012-02-08 04:07:34
您正在依靠非常粗略的規模工作的廣告攔截器。某些系統(例如Peerblock)具有已知廣告網站的列表,並直接阻止網站。其他系統處理元素名稱。你不能保證每個系統都能以這種方式工作。有些會,但不是全部。 – 2012-02-07 11:10:30
類似的東西已經出現在我的腦海裏,但由於@ dawmail333提到的原因,這將是我的最後手段 – Hannes 2012-02-07 11:26:38