2016-07-18 81 views
1

正確執行我想跟蹤我的網頁上針對AdSense元素的點擊次數。爲了實現這個目標,我把焦點的窗口對象,如果它失去焦點,我檢查如果鼠標是在AdSense的iFrame的區域。然後我再把焦點放回窗口。

這工作。但是在Chrome中它只能運行一次。所以,如果我點擊AdSense廣告(在新標籤中打開),然後我點擊一個又一個,該事件不會再觸發。

如果我在控制檯中執行$(window).focus(),onBlur事件再次觸發 - 但是在我的代碼中執行的$(window).focus()不會顯示任何效果。我用Timeout也試過了,沒有成功。

任何想法?

trackElements("#contentAdSense, #fallbackAdSense, #sidebarAdSense"); 

function trackElements (elementsToTrack) 
{ 
    var isOverElement = false; 

    $(window).focus(); 

    $(elementsToTrack).mouseenter(function(e){ 
     isOverElement = e.currentTarget.id; 
    }); 

    $(elementsToTrack).mouseleave(function(e){ 
     isOverElement = false; 
    }); 

    $(window).blur(function(e){ 
     windowLostBlur(); 
    }); 

    function windowLostBlur() 
    { 
     if (isOverElement) 
     { 
      console.log(isOverElement); 
      $(window).focus(); 
     } 
    }; 

};

簡體版:https://jsfiddle.net/327skdns/2/

+1

可以請你創建一個小提琴,讓我們可以檢查鉻? – Drone

+0

這裏是一個簡化版本 - > https://jsfiddle.net/327skdns/2/ – hwechselberg

回答

0

這是一個文檔瀏覽器BUG:jQuery focus not working in Chrome

你需要用的setTimeout來包裝你focus()電話:

trackElements("#contentAdSense, #fallbackAdSense, #sidebarAdSense"); 

function trackElements (elementsToTrack) 
{ 
    var isOverElement = false; 

    $(window).focus(); 

    $(elementsToTrack).mouseenter(function(e){ 
     isOverElement = e.currentTarget.id; 
    }); 

    $(elementsToTrack).mouseleave(function(e){ 
     isOverElement = false; 
    }); 

    $(window).blur(function(e){ 
     windowLostBlur(); 
    }); 

    function windowLostBlur() 
    { 
     if (isOverElement) 
     { 
      console.log(isOverElement); 
      setTimeout(function(){ $(window).focus(); }, 50); 
     } 
    }; 
}