Событие клика, добавленное в родительский iframe(тело), не работает в дочернем iframe(теле)
У меня есть требование, где я должен обнаружить неактивность веб-страницы, и если пользователь неактивен в течение более 15 минут, то пользователь должен выйти из системы. Для этого я пытаюсь обнаружить неактивность пользователя, прикрепляя события нажатия / нажатия клавиш ко всей странице целиком. а также для основного iframe.
Проблема в том, что я могу обнаружить событие нажатия / нажатия клавиш на главной странице (основной iframe), но где бы ни находился showDialoge (другой iframe), я не могу обнаружить это событие. Несмотря на то, что эти события добавляются в тело основного iframe, а также на всю веб-страницу, я не могу обнаружить то же самое. Пожалуйста, помогите.
Я использую OpenText Cordys Framework XFORMs / JavaScript.
Нет jquery на данный момент, но при необходимости я могу использовать.
2 ответа
Если ваши файлы находятся на одном сервере, вы можете вызвать функцию родительского окна из дочернего iframe, например
parent.html
<script>
window.whichKey = function(keycode) {
console.log("I'm called from child frame, you pressed " + keycode);
}
</script>
child.html
<script>
window.onkeypress = function(event) {
window.parent.window.whichKey(event.keyCode);
}
</script>
Другим возможным решением для вашего случая является передача переменной в url
родителя от вашего ребенка iframe. Например window.top.location.href = "parent.html?inactive=true";
а в родительском окне вы можете проверить эту переменную и выполнить необходимые действия.
Вот как вы можете привязать событие от родителя к телу дочернего фрейма для прослушивания keypress
с помощью jQuery
$("#child-frame").bind("load", function(){
$(this).contents().find("body").on('keypress', function(e) {
console.log(e.keyCode);
});
});
System .windows вернет вам оконные объекты открытых приложений. Вы можете прикрепить обработчик событий ко всем окнам и делать это.
Если я понимаю вашу проблему, это связано с распространением событий. Я признаю, что я менее знаком с фреймами. Смотрите этот другой пост. Что такое всплывающее и захватывающее событие?
Помимо вашего вопроса, в идеале вы должны управлять этим с помощью сессий. Срок окончания сеанса через 15 минут. Если пользователь не авторизован, он же не залогинен, отправьте его на главную страницу.