2016-07-18 3 views
1

Я хочу отслеживать клики по элементам AdSense на моей странице. Чтобы добиться этого, я сосредоточил внимание на объекте окна и, если он потерял фокус, я проверяю, находилась ли мышь в области iFrame AdSense. Затем я снова вернусь к фокусу.

Это работает. Но в Chrome он работает только один раз. Поэтому, если я нажимаю на объявление 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

Это документально Chrome ошибка: jQuery focus not working in Chrome

Вам нужно обернуть focus() вызов с SetTimeout:

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); 
     } 
    }; 
} 
Смежные вопросы