É possível determinar se o Google Chrome está no modo anônimo por meio de um script?
Edit: Na verdade, eu quis dizer que é possível por meio de script de usuário, mas as respostas presumem que o JavaScript está sendo executado em uma página da web. Voltei a fazer a pergunta aqui em relação aos scripts de usuário.
javascript
google-chrome
incognito-mode
RodeoClown
fonte
fonte
incognito
se você pudesse determiná-lo facilmente :)Respostas:
Sim. A API FileSystem é desativada no modo de navegação anônima. Verifique https://jsfiddle.net/w49x9f1a/ quando você está ou não no modo de navegação anônima.
Código de amostra:
fonte
Uma maneira é visitar um URL exclusivo e, em seguida, verificar se um link para esse URL é tratado como visitado por CSS.
Você pode ver um exemplo disso em "Detectando incógnito" (link inativo) .
Artigo de pesquisa do mesmo autor para substituir o link Detecção de incógnito acima
Em
main.html
adicionar um iframe,, e algum código JavaScript:
Em seguida,
test.html
são carregados no iFrame:NOTA: tentar isso no sistema de arquivos pode fazer o Chrome gritar sobre "Javascript não seguro". No entanto, ele funcionará servindo de um servidor da web.
fonte
:visited
: hacks.mozilla.org/2010/03/…No Chrome 74+, você pode determinar isso estimando o espaço de armazenamento do sistema de arquivos disponível
Veja o jsfiddle
fonte
Você pode, em JavaScript, ver a resposta de JHurrah . Exceto para não destacar links, todo o modo anônimo não salva o histórico de navegação e cookies. Da página de ajuda do google :
Como você pode ver, as diferenças entre a navegação normal e anônima acontecem depois que você visita a página da web, portanto, não há nada que o navegador comunique ao servidor quando está neste modo.
Você pode ver o que exatamente o seu navegador envia para o servidor usando um dos muitos analisadores de solicitação HTTP, como este aqui . Compare os cabeçalhos entre a sessão normal e anônima e você não verá nenhuma diferença.
fonte
Se você estiver desenvolvendo uma extensão, poderá usar a API de guias para determinar se uma janela / guia está anônima.
Mais informações podem ser encontradas aqui .
Se você está apenas trabalhando com uma página da Web, não é fácil e foi projetado para ser assim. No entanto, notei que todas as tentativas de abrir um banco de dados (window.database) falham quando em incógnito, isso ocorre porque, quando em incógnito, nenhum traço de dados pode ser deixado na máquina do usuário.
Não testei, mas suspeito que todas as chamadas para localStorage também falham.
fonte
Isso usa uma promessa de esperar que o código assíncrono defina um sinalizador, para que possamos usá-lo de forma síncrona depois.
então nós podemos fazer
fonte
reject('Check incognito failed')
porresolve(false)
se quiserisIncognito
ser um booleano que só é verdadeiro ou falso? Obrigado.Syntax Error: await is a reserved word
, e acho queawait
sempre precisa estar dentro de umaasync
função. Então, acho que esse código não funciona.reject
levantaria uma exceção se fosse chamada, e um valor não seria retornado, oisIncognito
que sempre seriatrue
oufalse
a maneira como o código é escrito. No entanto, você também poderá usar uma 'resolução' lá se quiser que um valor seja retornado. E pode depender de como o ambiente lida com a espera no escopo global? Funciona no console do Chrome no escopo global, mas você pode tentar agrupar tudo(async function() { 'everything here' })();
para que seja executado dentro de uma função assíncronaisIncognito
vez do resultado e executá-la depois em uma função assíncrona:let isIncognito = new Promise( ...etc
então, em outro lugar, você teria uma função como(async function() { if( !(await isIncognito) ) {alert('not incognito') } })();
Função rápida de copiar e colar com base na resposta de Alok (observação: isso é assíncrono)
uso:
fonte
Aqui está a resposta sugerida escrita em sintaxe ES6 e ligeiramente esclarecida.
fonte
Aqui, a solução usando promessas
E como usá-lo:
fonte
A documentação do modo de navegação anônima diz especificamente que os sites não se comportarão de maneira diferente. Acredito que isso significa que a resposta é não.
fonte