我想跟踪页面上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();
}
};
};
答案 0 :(得分:1)
这是一个记录在案的Chrome错误: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 );
}
};
}