2016-07-18 6 views
1

ページのAdSense要素のクリックをトラッキングします。これを実現するために、ウィンドウオブジェクトにフォーカスを当て、フォーカスが失われた場合は、マウスがAdSense iFrameの領域にあるかどうかを確認します。その後、再びフォーカスを窓に戻します。

これは機能します。しかし、Chromeでは1回しか動作しません。したがって、新しいタブで開く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); 
     } 
    }; 
} 
関連する問題