Способы обнаружения CTRL-N или когда пользователь открывает новое окно - PullRequest
0 голосов
/ 10 марта 2009

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

Мы пытались избежать Ctrl + N хуков JavaScript, но, возможно, это вариант.

Я предполагаю, что запрос является точно таким же URL ... с Ctrl + N ?

Ответы [ 6 ]

10 голосов
/ 10 марта 2009

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

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

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

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

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

3 голосов
/ 10 марта 2009

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

2 голосов
/ 10 марта 2009

Почему?

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

1 голос
/ 15 октября 2009

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

<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>

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

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

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

1 голос
/ 11 марта 2009

Вы могли бы добавить число окон в сеанс и увеличить его на window.onload и уменьшить на window.onunload.

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

0 голосов
/ 10 марта 2009

Да и нет,

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

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

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

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

...