Я решил эту проблему, используя две HTML-страницы. На главной странице определяют переменную состояния и устанавливают cookie. Вторая страница открывается в новом окне (не на вкладке), считывает куки и устанавливает статус для куки. Под MSIE значение cookie передается дочерней странице, когда главная страница находится в обычном режиме. В режиме просмотра InPrivate значение cookie не передается на дочернюю страницу (но передается при открытии новой вкладки).
Страница main.html
:
<script>
var myCookie="nocookie";
document.cookie="checkInPrivate=1";
var h=window.open("child.html", "_blank", "left=9999,height=200,width=200");
setTimeout(function() {
var status=null;
if (myCookie=="nocookie") {
status="unable to determine if we are InPrivate Browsing mode (child page did not set the cookie)";
} else if (myCookie.indexOf("checkInPrivate")>=0) {
status="not in InPrivate Browsing mode (child page did set the cookie)";
} else {
status="in InPrivate Browsing mode (child page set the cookie value but it was not provided)";
}
alert(status);
}, 200);
</script>
Страница child.html
:
Detecting MSIE's InPrivate Browsing mode...
<script>
window.opener.myCookie=document.cookie;
window.close();
</script>
Я использую режим просмотра InPrivate для предотвращения включения вспомогательных объектов браузера (BHO) и расширений браузера, поскольку BHO чаще всего являются вредоносными программами, которые могут изменять веб-страницы, даже если используются HTTPS и строгая аутентификация. Internet Explorer 9 имеет «Отключить панели инструментов и расширения при запуске просмотра InPrivate» в настройках «Конфиденциальность».
Однако это не самый лучший способ предотвратить расширение вредоносного браузера: вредоносное расширение может изменить поведение главной страницы, чтобы заставить его думать, что значение myCookie
не было установлено и. Мы ошибочно предположили бы, что мы находимся в режиме просмотра InPrivate.
Обратите внимание, что мне нужны файлы cookie для моего приложения, поэтому я не использую InPrivate Browsing для этой цели.