编辑 - 问题的简短描述。是否可以使用jQuery和javascript拦截弹出窗口(打开时),并从父窗口监听/检测键盘输入到文本框中。
我正在开发一个最近切换到单点登录类型身份验证的网站。因此,用户的会话不再由应用程序控制,而是由中央授权服务器控制。
为了防止用户在没有意识到他们的会话超时的情况下被启动,我们创建了一个简单的计时器。在没有活动的X分钟后,会出现一个警告横幅,其中包含一个扩展会话的链接。
以下是我们用于侦听网页上活动的代码段
function DetectChanges() {
$('input[type=text], textarea').on('change keyup paste', function () {
console.log('Input detected - Resetting ession timers');
$('input[type=text], textarea').off('change keyup paste');
ResetSessionExpirationInformation();
setTimeout(DetectChanges, msToCheckInput);
});
}
基本上,前提是每隔一段时间就会看到用户是否正在按键盘。如果是这样,请延长会话并停止监听键盘输入。
我遇到的问题是我需要能够判断用户是否在子窗口中敲击键盘(旧的schoool弹出窗口,而不是对话框或模态)。由于这个站点使用了大量的内联JS,我没有一种简单的方法可以访问这些新窗口。但是,我确实发现我可以覆盖window.open
函数以跟踪窗口。
var openedWindows = [];
window._open = window.open; // saving original function
window.open = function (url, name, params) {
var newWin = window._open(url, name, params);
newWin.focus();
newWin.onload = setTimeout(DetectChangesChild(newWin), msToCheckInput);
ResetSessionExpirationInformation();
openedWindows.push(newWin);
我在上面的DetectChangesChild方法中传递了对窗口的引用,所以我稍后会在代码路径上有一个引用。
function DetectChangesChild(childWindow) {
childWindow.alert("Listening Child Window");
$(childWindow).contents('input[type=text], textarea').on('change keyup paste', function () {
alert('Stuff happened');
console.log('Input detected - Resetting session timers');
childWindow.$('input[type=text], textarea').off('change keyup paste');
ResetSessionExpirationInformation();
setTimeout(DetectChangesChild(childWindow), msToCheckInput);
});
}
有人知道如何在弹出窗口中监听文本输入元素以进行更改,以便我可以适当地重置会话过期时间吗?
注意 - 我知道反对覆盖本机函数的警示性声明,但我们没有与此函数的另一个覆盖冲突的危险。