2016-07-18 2 views
1

내 페이지의 애드 센스 요소에 대한 클릭 수를 추적하고 싶습니다. 이를 달성하기 위해 창 개체에 포커스를두고 포커스가 사라지면 마우스가 애드 센스 iFrame 영역에 있는지 확인합니다. 그런 다음 초점을 다시 창에 둡니다.

이것은 작동합니다. 하지만 크롬에서는 한 번만 작동합니다. 따라서 새 탭에서 열리는 adSense 광고를 클릭 한 다음 다른 광고를 클릭하면 이벤트가 더 이상 발생하지 않습니다.

콘솔에서 $ (window) .focus()를 실행하면 onBlur 이벤트가 다시 발생하지만 내 코드에서 실행 된 $ (window) .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); 
      $(window).focus(); 
     } 
    }; 

}};

간체 버전 : https://jsfiddle.net/327skdns/2/

+1

당신이 바이올린을 만드십시오 수 있도록 우리 크롬을 확인할 수 있니? – Drone

+0

은 단순화 된 버전입니다. -> https://jsfiddle.net/327skdns/2/ – hwechselberg

답변

0

이것은 문서화 된 크롬 버그 : 당신은의 setTimeout으로 focus() 전화를 포장 할 필요가 jQuery focus not working in Chrome

:

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); 
     } 
    }; 
}