HKGalden學術臺
發表文章發起投票
[JQuery教學]為何高登的block adblockplus script會誤殺
我們先看看高登的"block adblock plus"的原理
在高登的原始碼中, 我們看到

<script type="text/javascript">
function blockAdblockUser() {
if (($('.myTestAd').height() == 0) || ($('.myTestAd').height() == null)) {
alert('請注意您的瀏覽器安裝了不當的插件例如 Adblock,請刪除該插件並重新啟動您的瀏覽器。');
window.location = 'blank.htm';
}
}
$(document).ready(function(){
blockAdblockUser();
});
</script>


意思是當$(document).ready事件發生後
就會載入blockAdblockUser()這個function
blockAdblockUser()這個function檢查了class="myTestAd"HTML元素
假如class="myTestAd"HTML元素的高度是0或空白
就會彈出提示視窗和將頁面轉為'blank.htm'

他們IT部的思路很正確
因為用戶裝了adblockplus把廣告阻擋, class="myTestAd"HTML元素就會變成沒有任何內容, 或是 被加上display:none 不作顯示
class="myTestAd"HTML元素的高度自然會是0或空白
這樣就知道用戶有沒有裝adblockplus了

可惜, 不少高登用戶發現他們沒有安裝向日葵插件或是adblockplus, 仍然被發現"安裝了不當的插件"
為什麼會發生躺著也中槍的問題?

原因在$(document).ready()
.ready( handler )

handler
Type: Function()
A function to execute after the DOM is ready.

http://api.jquery.com/ready/

window.onload$(window).load()不同
window.onload$(window).load()會在完成載入整個網頁(包括圖片,iframe等等)時執行
$(document).ready()則會在DOM載入完成時執行(包括圖片,iframe等等)

blockAdblockUser()執行的時間比載入廣告更早
class="myTestAd"HTML元素在那段時間是沒有任何內容(因為廣告還未載入), 它的高度會是0或空白
誤殺就出現了


PS: 我是jQuery新手
Good0Bad0
2013/07/11, 1:07:12 凌晨
本貼文共有 0 個回覆
此貼文已鎖,將不接受回覆
發表文章發起投票