Est-il possible de déterminer si Google Chrome est en mode navigation privée via un script?
Edit: Je voulais en fait dire est-ce possible via un script utilisateur, mais les réponses supposent que JavaScript s'exécute sur une page Web. J'ai re-posé la question ici en ce qui concerne les scripts utilisateur.
javascript
google-chrome
incognito-mode
RodéoClown
la source
la source
incognito
si vous pouviez le déterminer facilement :)Réponses:
Oui. L'API FileSystem est désactivée en mode navigation privée. Consultez https://jsfiddle.net/w49x9f1a/ lorsque vous êtes et n'êtes pas en mode navigation privée.
Exemple de code:
la source
Une façon est de visiter une URL unique, puis de vérifier si un lien vers cette URL est traité comme visité par CSS.
Vous pouvez voir un exemple de ceci dans "Détecter Incognito" (lien mort) .
Document de recherche du même auteur pour remplacer le lien Détecter la navigation privée ci-dessus
En
main.html
ajoutant un iframe,, et du code JavaScript:
Ensuite
test.html
, ils sont chargés dans l'iFrame:REMARQUE: essayer ceci à partir du système de fichiers peut faire pleurer Chrome à propos de "Javascript non sécurisé". Il fonctionnera cependant à partir d'un serveur Web.
la source
:visited
: hacks.mozilla.org/2010/03/…Dans Chrome 74+, vous pouvez le déterminer en estimant l'espace de stockage disponible du système de fichiers
Voir le jsfiddle
la source
Vous pouvez, en JavaScript, voir la réponse de JHurrah . Sauf pour ne pas mettre en évidence les liens, tout le mode de navigation privée ne sauvegarde pas l'historique de navigation et les cookies. Depuis la page d'aide Google :
Comme vous pouvez le voir, les différences entre la navigation normale et la navigation privée se produisent après la visite de la page Web, il n'y a donc rien que le navigateur communique au serveur lorsqu'il est dans ce mode.
Vous pouvez voir exactement ce que votre navigateur envoie au serveur en utilisant l'un des nombreux analyseurs de requêtes HTTP, comme celui-ci ici . Comparez les en-têtes entre la session normale et la navigation privée et vous ne verrez aucune différence.
la source
Si vous développez une extension, vous pouvez utiliser l'API des onglets pour déterminer si une fenêtre / un onglet est incognito.
Plus d'informations peuvent être trouvées ici .
Si vous travaillez simplement avec une page Web, ce n'est pas facile et c'est conçu pour être ainsi. Cependant, j'ai remarqué que toutes les tentatives d'ouverture d'une base de données (window.database) échouent en mode incongnito, c'est parce qu'en mode incognito, aucune trace de données n'est autorisée sur la machine des utilisateurs.
Je ne l'ai pas testé mais je soupçonne que tous les appels à localStorage échouent également.
la source
Cela utilise une promesse d'attendre que le code asynchrone définisse un indicateur, afin que nous puissions l'utiliser de manière synchrone par la suite.
alors nous pouvons faire
la source
reject('Check incognito failed')
avecresolve(false)
si je veuxisIncognito
être un booléen qui n'est jamais vrai ou faux? Merci.Syntax Error: await is a reserved word
, et je pense qu'ilawait
faut toujours être dans uneasync
fonction. Donc je pense que ce code ne fonctionne pas.reject
soulèverait une exception si elle est appelée, et une valeur ne serait pas retourné, doncisIncognito
serait toujourstrue
oufalse
la façon dont le code est écrit. Cependant, vous pourrez également y utiliser une «résolution» si vous souhaitez qu'une valeur soit renvoyée. Et cela pourrait dépendre de la manière dont l'environnement gère l'attente dans la portée globale? Cela fonctionne sur la console Chrome dans la portée globale, mais vous pouvez essayer de tout emballer(async function() { 'everything here' })();
pour qu'il soit exécuté dans une fonction asynchroneisIncognito
lieu du résultat, et l'exécuter ensuite dans une fonction asynchrone:let isIncognito = new Promise( ...etc
puis ailleurs, vous auriez une fonction comme(async function() { if( !(await isIncognito) ) {alert('not incognito') } })();
Fonction de copier-coller rapide basée sur la réponse d'Alok (note: c'est asynchrone)
usage:
la source
Voici la réponse suggérée écrite dans la syntaxe ES6 et légèrement nettoyée.
la source
Voici la solution utilisant les promesses
Un comment l'utiliser:
la source
La documentation du mode navigation privée indique spécifiquement que les sites Web ne se comporteront pas différemment. Je crois que cela signifie que la réponse est non.
la source