Способы обнаружения нажатия клавиши CTRL-N или когда пользователь открывает новое окно

StackOverflow https://stackoverflow.com/questions/632062

  •  08-07-2019
  •  | 
  •  

Вопрос

Как мы можем определить, когда пользователь открывает новое окно?Пользователь уже прошел проверку подлинности, и мы активно используем сеансы.

Мы пытались избежать Ctrl+N javascript зацепляет, но, возможно, это вариант.

Я предполагаю, что запрос - это точно такой же URL ... с Ctrl+N?

Это было полезно?

Решение

  

Мы пытались избежать ловушек ctrl-n javascript

Забудь об этом. Хотя теоретически вы можете попытаться перехватить события нажатия клавиш для & # 8216; n & # 8217; с модификатором клавиши управления существует множество других способов открыть новое окно или вкладку, которые могут быть с большей вероятностью использованы, и вы не сможете их поймать. Файл -> Новое окно / вкладка, ссылка среднего щелчка или щелчка по нажатию, средние кнопки назад / вперед, щелчок правой кнопкой мыши по открытию в новом окне, открытие закладки в новой вкладке, двойной щелчок по значку браузера ...

  

Пользователь уже аутентифицирован, и мы активно используем сеансы.

Это не должно быть проблемой само по себе. Я предполагаю, что вы имеете в виду, что ваше приложение выдает в сеансе все виды специфичных для страницы данных, которых у него не должно быть, и теперь вы обнаруживаете разрывы приложения, когда у вас открыто более одного окна? Ну, соболезнования и счастливого переписывания.

Тем временем все, что вы можете сделать, - это сообщить пользователю & # 8220; не пытайтесь открыть два окна браузера в одном приложении & # 8221 ;. Существуют потенциальные способы заставить JavaScript на одной странице заметить, что JavaScript запускается на другой странице в том же домене в одно и то же время, обычно вовлекая использование document.cookie в качестве межстраничного канала связи. Но это также немного хрупко.

Другие советы

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

Почему?

И в любом случае вы не можете это обнаружить.Пользователь может открыть новое окно не только с помощью Ctrl+N но также и с Файл-> Новое окно.

Возможно, вы можете поместить количество окон в сеанс и увеличить его на window.onload и уменьшить на window.onunload .

Представь, что я бубниваю, всасываю воздух сквозь зубы и становлюсь "лучше, чем я, гува" если вы используете это, хотя.

Что я сделал, чтобы решить эту проблему, так это когда пользователь аутентифицируется, задает имя окна при действительном входе в систему.

<script>

window.name = 'oneWindow';

</script>

А затем на главной странице выполните проверку JavaScript:

<script>

if (window.history.length == 0 || window.name != 'oneWindow') 

//history length to see if it's a new tab or opened in a new window  0 for IE, 1 for FF

//window name to see if it's a CTRL + N new window

</script>

Если проверка верна, то скрыть / удалить основное содержимое страницы и показать сообщение о том, что они что-то не поддерживают.

Это работает, когда ваша страница входа не привязана к главной странице.

Если у вас нет главной страницы, я бы рекомендовал поставить галочку на всех ваших страницах.

Да и нет,

Вы всегда увидите это, если элемент управления имеет фокус, иначе событие отправляется непосредственно в браузер, а код на странице никогда не слышит об этом.

По моему опыту, вы не можете взломать ярлык браузера, ваш пробег может отличаться. Вы, вероятно, знаете, что это произошло, но браузер сделает свое дело (по понятной причине)

В большинстве браузеров эффект Ctrl - N заключается в открытии нового окна с тем же URL-адресом, что и у старого, и связывания его с тем же идентификатором сеанса.

Лучше всего, если возможно, изменить внутренний код и учесть такие вещи. Нарушение функции браузера никогда не бывает полезным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top