¿Es posible determinar si Google Chrome está en modo incógnito mediante un script?
Editar: en realidad quise decir si es posible a través de un script de usuario, pero las respuestas asumen que JavaScript se está ejecutando en una página web. He vuelto a hacer la pregunta aquí con respecto a los scripts de usuario.
javascript
google-chrome
incognito-mode
RodeoPayaso
fuente
fuente
incognito
si pudiera determinarlo fácilmente :)Respuestas:
Si. La API FileSystem está deshabilitada en modo incógnito. Consulte https://jsfiddle.net/w49x9f1a/ cuando esté y no esté en modo incógnito.
Código de muestra:
fuente
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,y algo de código JavaScript:
Luego, en
test.html
eso se cargan en el iFrame: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.
fuente
:visited
: hacks.mozilla.org/2010/03/…En Chrome 74+, puede determinar esto estimando el espacio de almacenamiento disponible en el sistema de archivos
Ver el jsfiddle
fuente
Puede, en JavaScript, ver la respuesta de JHurrah . Excepto por no resaltar enlaces, el modo incógnito no guarda el historial de navegación ni las cookies. Desde la página de ayuda de Google :
Como puede ver, las diferencias entre la navegación normal y la navegación de incógnito ocurren después de visitar la página web, por lo tanto, no hay nada que el navegador se comunique con el servidor cuando está en este modo.
Puede ver qué envía exactamente su navegador al servidor utilizando uno de los muchos analizadores de solicitudes HTTP, como este aquí . Compare los encabezados entre sesión normal e incógnito y no verá ninguna diferencia.
fuente
Si está desarrollando una extensión, puede usar la API de pestañas para determinar si se trata de una ventana / pestaña de incógnito.
Puede encontrar más información aquí .
Si solo está trabajando con una página web, no es fácil y está diseñado para ser así. Sin embargo, he notado que todos los intentos de abrir una base de datos (window.database) fallan cuando están en incongnito, esto se debe a que cuando están en incógnito no se permite dejar rastro de datos en la máquina del usuario.
No lo he probado, pero sospecho que todas las llamadas a localStorage también fallan.
fuente
Esto usa una promesa de esperar a que el código asincrónico establezca una bandera, por lo que podemos usarlo sincrónicamente después.
entonces podemos hacer
fuente
reject('Check incognito failed')
conresolve(false)
si quiero?isIncognito
ser un booleano que solo sea verdadero o falso? Gracias.Syntax Error: await is a reserved word
, y creo queawait
siempre debe estar dentro de unaasync
función. Entonces creo que este código no funciona.reject
generaría una excepción si se llama, y no se devolvería un valor, porisIncognito
lo que siempre lo seríatrue
ofalse
la forma en que se escribe el código. Sin embargo, también podrá usar una 'resolución' allí si desea que se devuelva un valor. ¿Y podría depender de cómo se maneja el entorno en el ámbito global? Funciona en la consola de Chrome en el alcance global, pero puede intentar ajustar todo(async function() { 'everything here' })();
para que se ejecute dentro de una función asíncronaisIncognito
lugar del resultado y ejecutarla luego en una función asincrónica:let isIncognito = new Promise( ...etc
luego en otro lugar tendría una función como(async function() { if( !(await isIncognito) ) {alert('not incognito') } })();
Función de copiar y pegar rápida basada en la respuesta de Alok (nota: esto es asincrónico)
uso:
fuente
Aquí está la respuesta sugerida escrita en sintaxis ES6 y ligeramente limpia.
fuente
Aquí la solución usando promesas
Cómo usarlo:
fuente
La documentación para el modo incógnito dice específicamente que los sitios web no se comportarán de manera diferente. Creo que esto significa que la respuesta es no.
fuente