Можете ли вы определить, находится ли Chrome в режиме инкогнито через скрипт?
можно ли определить, находится ли Google Chrome в режиме инкогнито через скрипт?
Edit: Я на самом деле имел в виду, возможно ли это через пользовательский скрипт, но ответы предполагают, что JavaScript работает на веб-странице. Я снова задал вопрос здесь в отношении пользовательских скриптов.
7 ответов
да. API файловой системы отключен в режиме инкогнито. Проверьтеhttp://jsfiddle.net/w49x9f1a/ Когда вы находитесь и не находитесь в режиме инкогнито.
пример кода:
var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
if (!fs) {
console.log("check failed?");
} else {
fs(window.TEMPORARY,
100,
console.log.bind(console, "not in incognito mode"),
console.log.bind(console, "incognito mode"));
}
один из способов-посетить уникальный 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 = '';
}
затем в test.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". Он будет, однако, работать с веб-сервером.
вы можете, в JavaScript, см. JHurrah это ответ. За исключением не выделения ссылок, все режим инкогнито не сохраняет историю просмотра и файлы cookie. Из google страница поможет:
- веб-страницы, которые вы открываете и файлы, загруженные в то время как вы инкогнито не записываются в вашем браузере и история загрузок.
- все новые файлы cookie удаляются после закрытия всех окон инкогнито что вы открыли.
Как вы можете видеть, различия между обычным просмотром и инкогнито происходят после вы посещаете веб-страницу, поэтому нет ничего, что браузер связывается с сервером, когда он находится в этом режиме.
вы можете увидеть, что именно Ваш браузер отправляет на сервер, используя один из многих анализаторов HTTP-запросов, например здесь. Сравните заголовки между обычной сессией и инкогнито, и вы не увидите никакой разницы.
Если вы разрабатываете расширение, вы можете использовать API вкладок, чтобы определить, является ли окно/вкладка инкогнито.
более подробную информацию можно найти здесь.
Если вы просто работаете с веб-страницей, это непросто, и он предназначен для этого. Однако, я заметил, что все попытки открыть базу данных (окно.database) сбой, когда в инконгнито, это потому, что, когда в инкогнито нет следов данных не разрешается оставлять на пользователях машина.
Я не тестировал его, но я подозреваю, что все вызовы localStorage также терпят неудачу.
Это использует обещание ждать асинхронного кода, чтобы установить флаг, поэтому мы можем использовать его синхронно позже.
let isIncognito = await new Promise((resolve, reject)=>{
var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
if (!fs) reject('Check incognito failed');
else fs(window.TEMPORARY, 100, ()=>resolve(false), ()=>resolve(true));
});
затем мы можем сделать
if(isIncognito) alert('in incognito');
else alert('not in incognito');
быстрая функция копирования-вставки на основе Алок-х (Примечание: это является асинхронным)
function ifIncognito(incog,func){
var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
if (!fs) console.log("checking incognito failed");
else {
if(incog) fs(window.TEMPORARY, 100, ()=>{}, func);
else fs(window.TEMPORARY, 100, func, ()=>{});
}
}
использование:
ifIncognito(true, ()=>{ alert('in incognito') });
// or
ifIncognito(false, ()=>{ alert('not in incognito') });
в документации для режима инкогнито конкретно говорится, что веб-сайты не будут вести себя по-другому. Я считаю, что это означает, что ответ-нет.