Czy można określić, czy przeglądarka Google Chrome jest w trybie incognito za pomocą skryptu?
Edycja: Właściwie miałem na myśli, czy jest to możliwe za pomocą skryptu użytkownika, ale odpowiedzi zakładają, że JavaScript działa na stronie internetowej. Ponownie zadałem tutaj pytanie w odniesieniu do skryptów użytkownika.
javascript
google-chrome
incognito-mode
RodeoClown
źródło
źródło
incognito
, gdybyś mógł to łatwo określić :)Odpowiedzi:
Tak. Interfejs API FileSystem jest wyłączony w trybie incognito. Sprawdź https://jsfiddle.net/w49x9f1a/ gdy jesteś i nie jesteś w trybie incognito.
Przykładowy kod:
źródło
Jednym ze sposobów jest odwiedzenie unikalnego adresu URL, a następnie sprawdzenie, czy link do tego adresu URL jest traktowany jako odwiedzany przez CSS.
Możesz zobaczyć przykład tego w „Wykrywaniu incognito” (link martwy) .
Artykuł badawczy tego samego autora, zastępujący powyższy link Wykrywanie incognito
W
main.html
dodać iframe,i trochę kodu JavaScript:
Następnie w
test.html
tym są ładowane do iFrame:UWAGA: próba tego z poziomu systemu plików może sprawić, że Chrome zacznie płakać z powodu „niebezpiecznego kodu JavaScript”. Będzie jednak działał na serwerze internetowym.
źródło
:visited
: hacks.mozilla.org/2010/03/…W Chrome 74+ możesz to ustalić, szacując dostępną przestrzeń dyskową systemu plików
Zobacz jsfiddle
źródło
Możesz w JavaScript zobaczyć odpowiedź JHurraha . Z wyjątkiem nie podświetlania linków, cały tryb incognito nie zapisuje historii przeglądania ani plików cookie. Ze strony pomocy Google :
Jak widać, różnice między normalnym przeglądaniem a trybem incognito występują po odwiedzeniu strony internetowej, stąd przeglądarka nic nie komunikuje się z serwerem, gdy jest w tym trybie.
Możesz zobaczyć, co dokładnie Twoja przeglądarka wysyła do serwera za pomocą jednego z wielu analizatorów żądań HTTP, takiego jak ten tutaj . Porównaj nagłówki między normalną sesją a incognito, a nie zobaczysz żadnej różnicy.
źródło
Jeśli tworzysz rozszerzenie, możesz użyć interfejsu API zakładek, aby określić, czy okno / karta jest incognito.
Więcej informacji można znaleźć tutaj .
Jeśli pracujesz tylko ze stroną internetową, nie jest to łatwe i tak zostało zaprojektowane. Zauważyłem jednak, że wszystkie próby otwarcia bazy danych (window.database) kończą się niepowodzeniem w trybie incongnito, ponieważ w trybie incognito nie można pozostawić śladu danych na komputerze użytkownika.
Nie testowałem tego, ale podejrzewam, że wszystkie wywołania localStorage również zawodzą.
źródło
Wykorzystuje to obietnicę oczekiwania, aż kod asynchroniczny ustawi flagę, więc możemy później używać go synchronicznie.
wtedy możemy zrobić
źródło
reject('Check incognito failed')
zeresolve(false)
jeśli chcęisIncognito
być wartością logiczną, która jest zawsze prawdziwa lub fałszywa? Dzięki.Syntax Error: await is a reserved word
i myślę, żeawait
zawsze musi być w ramachasync
funkcji. Więc myślę, że ten kod nie działa.reject
wywołałby wyjątek, gdyby został wywołany, a wartość nie zostałaby zwrócona, a więcisIncognito
zawsze tak będzietrue
lubfalse
sposób, w jaki kod jest napisany. Jednak możesz tam również użyć „rozwiązania”, jeśli chcesz zwrócić wartość. I może zależeć od tego, jak środowisko poradzi sobie w globalnym zakresie? Działa na konsoli Chrome w zakresie globalnym, ale możesz spróbować zawinąć wszystko,(async function() { 'everything here' })();
aby był uruchamiany w funkcji asynchronicznejisIncognito
zamiast wyniku, a następnie uruchomić ją w funkcji asynchronicznej:let isIncognito = new Promise( ...etc
wtedy gdzieś indziej miałbyś funkcję taką jak(async function() { if( !(await isIncognito) ) {alert('not incognito') } })();
Szybka funkcja kopiuj-wklej oparta na odpowiedzi Aloka (uwaga: jest to asynchroniczne)
stosowanie:
źródło
Oto sugerowana odpowiedź napisana w składni ES6 i nieco poprawiona.
źródło
Tutaj rozwiązanie wykorzystujące obietnice
Jak z tego korzystać:
źródło
Dokumentacja dotycząca trybu incognito mówi konkretnie, że strony internetowe nie będą się zachowywać inaczej. Uważam, że oznacza to, że odpowiedź brzmi: nie.
źródło