2015-11-27 19 views
8

Firefox ha lanciato una funzionalità denominata Tracking protection in v42.0. Blocca diversi script di monitoraggio come Google Analytics, Marketo, LinkedIn, eccCome rilevare se un utente sta utilizzando la protezione di inseguimento in Firefox 42+

Console output of the "Tracking protection" warnings

ho cercato di individuare attraverso navigator.DoNotTrack, ma restituisce unspecified in entrambi i casi - la navigazione in modalità normale, e la navigazione in modalità privata - utilizzando Firefox 42.0 su Mac.

Come posso rilevare in JavaScript se un utente sta visualizzando il sito web con la protezione di inseguimento sopra, dal momento che navigator.DoNotTrack fallisce?

+0

"? come posso rilevare se un utente sta utilizzando la protezione di monitoraggio" Sembra che manchi il punto di protezione del tracking, non credi? – TylerH

+5

@TylerH: Non se vuoi dire all'utente qualcosa del tipo "ti manca su importanti funzionalità dell'app - usa la normale modalità di navigazione e questo e quello saranno disponibili per te". – PetrHejda

+0

Sì, evitando tali messaggi di tracciamento è il punto * * di tracciare la protezione/navigazione privata. Non vuoi essere rintracciato, neanche indirettamente. AKA Non voglio che tu sappia dove sono, o anche che io sia nella tua zona. Metti uno di quei banner di tipo "questo sito utilizza i cookie" nella parte superiore della pagina per tutti gli utenti. – TylerH

risposta

8

navigator.donottrack mostra solo l'impostazione della "Do not track" preferenza. Esso non dice se tracking protection, che è una caratteristica diversa, è abilitato. Monitoraggio di protezione viene attivata automaticamente quando è in modalità di navigazione privata, ma gli utenti can change a setting in about:config di averlo abilitato a tempo pieno.

Anche se non si può dire direttamente se la funzione è attivata, è possibile controllare per i suoi effetti con qualcosa di simile:

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

Firefox uses un elenco ottenuto da Disconnect per la sua protezione il monitoraggio; basta usare un dominio che si conosce è su quella lista, e un'immagine che tu sai esisterà.

Naturalmente, questo potrebbe bandiera qualsiasi numero di cause per l'immagine non caricare, compresi i problemi di connettività di rete, blocco degli annunci del software, proxy di filtraggio, ecc

+2

Sì! Grazie. Questo risolve il mio problema. – PetrHejda

2

Qui è un po 'la versione della risposta di miken32 migliorato utilizzando differite:

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

o senza jQuery, utilizzando Promessa:

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