2015-11-27 8 views
8

Firefox hat eine Funktion namens Tracking protection in v42.0 gestartet. Es blockiert mehrere Tracking-Skripte wie Google Analytics, Marketo, LinkedIn etc.So erkennen Sie, ob ein Benutzer den Tracking-Schutz in Firefox 42+ verwendet

Console output of the "Tracking protection" warnings

Ich habe versucht, es durch navigator.DoNotTrack zu erkennen, aber es gibt unspecified in beiden Fällen - im normalen Modus Surfen und Browsen in Privater Modus - mit Firefox 42.0 auf Mac.

Wie kann ich in JavaScript erkennen, ob ein Benutzer die Website mit aktiviertem Tracking-Schutz anzeigt, da navigator.DoNotTrack fehlschlägt?

+0

"wie kann ich erkennen, ob ein Benutzer-Tracking-Schutz mit" Scheint irgendwie den Punkt des Tracking-Schutzes zu vermissen, meinst du nicht? – TylerH

+5

@TylerH: Nicht, wenn Sie dem Benutzer sagen möchten, dass Ihnen wichtige Funktionen der App fehlen - verwenden Sie den normalen Browser-Modus und dies und das wird für Sie verfügbar sein. – PetrHejda

+0

Ja, solche Tracking-Nachrichten zu vermeiden, ist der * Punkt * des Tracking-Schutzes/privaten Browsings. Sie wollen nicht verfolgt werden, auch nicht indirekt. AKA: Ich möchte nicht, dass du weißt, wo ich bin oder dass ich in deiner Gegend bin. Setzen Sie einfach eine dieser "diese Seite verwendet Cookies" Typ Banner über den oberen Rand Ihrer Seite für alle Benutzer. – TylerH

Antwort

8

navigator.donottrack zeigt nur die Einstellung der "Do not track" Präferenz. Es wird nicht angezeigt, ob tracking protection, ein anderes Feature, aktiviert ist. Der Verfolgungsschutz wird im privaten Browsermodus automatisch aktiviert, aber die Benutzer can change a setting in about:config haben die Vollzeitaktivierung aktiviert.

Während Sie nicht direkt sagen, wenn die Funktion aktiviert ist, können Sie für seine Effekte mit so etwas wie dies überprüfen:

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

Firefox uses eine Liste von Disconnect für seine Tracking-Schutz erhalten; Verwenden Sie einfach eine Domäne, von der Sie wissen, dass sie in der Liste ist, und ein Bild, von dem Sie wissen, dass es existiert.

Natürlich könnte dies Flagge eine beliebige Anzahl von Ursachen für das Bild nicht, einschließlich der Netzwerkkonnektivitätsprobleme, Ad-Blocker-Software, Filter-Proxies zu laden usw.

+2

Ja! Vielen Dank. Dies löst mein Problem. – PetrHejda

2

Hier leicht Version von miken32 Antwort verbessert wird unter Verwendung der latenten:

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

oder ohne jQuery, mit Versprechen:

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