Действительно ли возможно определить, находится ли Google Chrome в режиме инкогнито с помощью сценария?
Править: Я на самом деле имел в виду, это возможный с помощью пользовательского сценария, но ответы предполагают, что JavaScript работает на веб-странице. Я повторно спросил вопрос здесь в отношении пользовательских сценариев.
Один из способов - посетить уникальный URL-адрес и затем проверить, обрабатывается ли ссылка на этот URL-адрес как посещенная CSS.
Вы можете увидеть пример этого в «Обнаружении инкогнито» (Мертвая ссылка) .
Исследовательская статья того же автора по замене ссылки «Обнаружение инкогнито» выше
В main.html
добавьте iframe,
<iframe id='testFrame' name='testFrame' onload='setUniqueSource(this)' src='' style="width:0; height:0; visibility:hidden;"></iframe>
и некоторый код 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 = '';
}
Затем в тест. html
, которые загружаются в 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>
ПРИМЕЧАНИЕ: попытка сделать это из файловой системы может заставить Chrome кричать о «небезопасном Javascript». Это однако будет работать с веб-сервером.
Если вы разрабатываете расширение, вы можете использовать API вкладок, чтобы определить, является ли окно / вкладка инкогнито.
Дополнительную информацию можно найти здесь .
Если вы просто работаете с веб-страницей, это непросто, и так задумано. Однако я заметил, что все попытки открыть базу данных (window.database) терпят неудачу в режиме инкогнито, потому что в режиме инкогнито не допускается оставлять никаких следов данных на компьютере пользователя.
Я не тестировал его, но подозреваю, что все вызовы localStorage тоже терпят неудачу.
В документации по режиму инкогнито конкретно сказано, что веб-сайты не будут вести себя по-другому. Я полагаю, это означает, что ответ отрицательный.
Вы можете, в JavaScript, посмотреть ответ JHurrah. За исключением того, что ссылки не выделяются, все, что делает режим инкогнито, это не сохраняет историю просмотров и куки. Из страницы помощи google help page:
- Веб-страницы, которые вы открываете, и файлы, загруженные, пока вы находитесь в режиме инкогнито. не записываются в вашу историю просмотров и истории загрузок.
- Все новые файлы cookie удаляются после закрытия всех окон инкогнито. которые вы открывали.
Как вы видите, различия между обычным просмотром и инкогнито происходят после посещения веб-страницы, поэтому браузер ничего не передает серверу, когда находится в этом режиме.
Вы можете посмотреть, что именно ваш браузер посылает серверу, используя один из многих анализаторов HTTP-запросов, например вот этот. Сравните заголовки между обычной сессией и инкогнито, и вы не увидите никакой разницы.