将jQuery事件处理程序附加到弹出窗口内容

时间:2015-08-20 21:54:02

标签: javascript jquery popup

编辑 - 问题的简短描述。是否可以使用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);
    });
}

有人知道如何在弹出窗口中监听文本输入元素以进行更改,以便我可以适当地重置会话过期时间吗?

注意 - 我知道反对覆盖本机函数的警示性声明,但我们没有与此函数的另一个覆盖冲突的危险。

0 个答案:

没有答案