2015-11-27 9 views
8

Firefoxは、v42.0にTracking protectionという機能を導入しました。また、ブロックなど、Googleアナリティクス、Marketo、LinkedInの、などいくつかの追跡スクリプトユーザがFirefoxでトラッキング保護を使用しているかどうかを検出する方法42+

Console output of the "Tracking protection" warnings

私はnavigator.DoNotTrackを通してそれを検出しようとしていたが、それは両方のケースでunspecifiedを返します - 通常モードでのブラウジング、およびでブラウジングプライベートモード - MacではFirefox 42.0を使用します。

navigator.DoNotTrackが失敗したため、ユーザーがトラッキング保護をオンにしてウェブサイトを表示しているかどうかをJavaScriptで検出するにはどうすればよいですか?

+0

"?ユーザーが追跡保護を使用している場合どのように私は検出することができます"トラッキング保護のポイントを見逃しているように思えますか? – TylerH

+5

@タイラーH:あなたに、「あなたがアプリの重要な機能に欠けています - 通常のブラウジングモードを使用し、これが利用可能になる」などのようなものをユーザーに伝えたい場合はありません。 – PetrHejda

+0

そうした追跡メッセージを避けることは、追跡保護/プライベートブラウジングの*ポイント*です。あなたは間接的に追跡されることは望ましくありません。あなたが私がどこにいるのか、私があなたのエリアにいるのかを知ることは望ましくありません。すべてのユーザーのために、ページの上部に「このサイトはクッキーを使用しています」バナーの1つを入れてください。 – TylerH

答えて

8

navigator.donottrackは、​​の設定のみを示しています。別の機能であるtracking protectionが有効になっているかどうかはわかりません。トラッキング保護は、プライベートブラウジングモードでは自動的に有効になりますが、ユーザcan change a setting in about:configはフルタイムを有効にする必要があります。

機能が有効になっている場合は、直接伝えることはできませんが、あなたはこのようなもので、その効果を確認することができます。

var canreach = false; 
$(function() { 
    $('<img/>') 
     .attr("src", "//apps.facebook.com/favicon.ico") 
     .load(function(){canreach = true;}) 
     .css("display", "none") 
     .appendTo(document.body); 
}); 

Firefox usesその追跡保護のためDisconnectから取得したリスト。そのリストにあることがわかっているドメインを使用するだけで、あなたが知っているイメージが存在します。もちろん

、このフラグはここなどネットワーク接続の問題など、ロードしないように画像の原因の任意の数、ソフトウェアの広告ブロック、プロキシをフィルタリングし、

+2

はい!ありがとうございました。これは私の問題を解決します。 – PetrHejda

2

は繰延を使用してmiken32の答えを少し改良版であることができます:約束を使用して

function whenNoTrackingProtection() { 
    if (!whenNoTrackingProtection.promise) { 
     var dfd = new $.Deferred(); 
     whenNoTrackingProtection.promise = dfd.promise(); 

     var time = Date.now(); 
     $('<img/>') 
      .attr('src', '//apps.facebook.com/favicon.ico') 
      .on('load', dfd.resolve) 
      .on('error', function() { 
       if ((Date.now() - time) < 50) { 
        dfd.reject(); 
       } else { 
        // the request took to long, it seams this is a real network error 
        dfd.resolve(); 
       } 
      }); 
    } 

    return whenNoTrackingProtection.promise; 
} 

かのjQueryなし

、:

function whenNoTrackingProtection() { 
    if (!whenNoTrackingProtection.promise) { 
     whenNoTrackingProtection.promise = new Promise(function(resolve, reject) { 
      var time = Date.now(); 
      var img = new Image(); 
      img.onload = resolve; 
      img.onerror = function() { 
       if ((Date.now() - time) < 50) { 
        reject(); 
       } else { 
        // the request took to long, it seams this is a real network error 
        resolve(); 
       } 
      }; 
      img.src = '//apps.facebook.com/favicon.ico'; 
     }); 
    } 

    return whenNoTrackingProtection.promise; 
} 
関連する問題