Можете ли вы определить, находится ли Chrome в режиме инкогнито с помощью скрипта?



можно ли определить, находится ли Google Chrome в режиме инкогнито с помощью скрипта?



Edit:Я на самом деле имел в виду, возможно ли это с помощью пользовательского скрипта, но ответы предполагают, что JavaScript работает на веб-странице. Я снова задал вопрос здесь в отношении пользовательских скриптов.

586   7  

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's ответ. За исключением не выделения ссылок, все режим инкогнито не сохраняет историю просмотра и файлы cookie. От google страница поможет:

  • веб-страницы, которые вы открываете и загружаете файлы, пока вы инкогнито не записываются в вашем браузере и история загрузок.
  • все новые файлы cookie удаляются после закрытия всех окон инкогнито что вы открыли.

Как вы можете видеть, различия между обычным просмотром и инкогнито происходят после вы посещаете веб-страницу, следовательно, нет ничего, что браузер связывается с сервером, когда он находится в этом режиме.

вы можете увидеть, что именно Ваш браузер отправляет на сервер, используя один из многих анализаторов HTTP-запросов, например здесь. Сравните заголовки между обычным сеансом и инкогнито, и вы не увидите никакой разницы.

Если вы разрабатываете расширение, то вы можете использовать API вкладок, чтобы определить, является ли окно/вкладка инкогнито.

дополнительную информацию можно найти здесь.

Если вы просто работаете с веб-страницей, это не так просто, и он предназначен, чтобы быть таким образом. Однако, я заметил, что все попытки открыть базу данных (окно.база данных) сбой, когда в incongnito, это связано с тем, что когда в инкогнито нет следов данных, которые можно оставить на пользователях машина.

Я не проверял его, но я подозреваю, что все вызовы 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') });

в документации для режима инкогнито конкретно говорится, что веб-сайты не будут вести себя по-другому. Я считаю, что это означает, что ответ-нет.

Comments

    Ничего не найдено.