Una forma es visitar una URL única y luego verificar si un enlace a esa URL es tratado como visitado por CSS.
Puede ver un ejemplo de esto en "Detección de incógnito" (enlace muerto) .
Artículo de investigación del mismo autor para reemplazar el enlace Detecting Incognito anterior
En main.html
agregar un iframe,
<iframe id='testFrame' name='testFrame' onload='setUniqueSource(this)' src='' style="width:0; height:0; visibility:hidden;"></iframe>
y algo de código JavaScript:
function checkResult() {
var a = frames[0].document.getElementById('test');
if (!a) return;
var color;
if (a.currentStyle) {
color = a.currentStyle.color;
} else {
color = frames[0].getComputedStyle(a, '').color;
}
var visited = (color == 'rgb(51, 102, 160)' || color == '#3366a0');
alert('mode is ' + (visited ? 'NOT Private' : 'Private'));
}
function setUniqueSource(frame) {
frame.src = "test.html?" + Math.random();
frame.onload = '';
}
Luego, en test.html
eso se cargan en el iFrame:
<style>
a:link { color: #336699; }
a:visited { color: #3366A0; }
</style>
<script>
setTimeout(function() {
var a = document.createElement('a');
a.href = location;
a.id = 'test';
document.body.appendChild(a);
parent.checkResult();
}, 100);
</script>
NOTA: intentar esto desde el sistema de archivos puede hacer que Chrome llore por "Javascript no seguro". Sin embargo, funcionará sirviendo desde un servidor web.
incognito
si pudiera determinarlo fácilmente :)