【问题标题】:Click event added to parent iframe(body) not working in child iframe(body)添加到父 iframe(body) 的单击事件在子 iframe(body) 中不起作用
【发布时间】:2017-03-29 01:59:31
【问题描述】:

我有一个要求,我需要检测网页的不活动状态,如果用户不活动超过 15 分钟,那么用户应该退出。为此,我试图通过附加点击/按键事件来检测用户的不活动状态整个页面以及主 iframe。

这里的问题是我能够检测到主页(主 iframe)上的按键/单击事件,但是无论在哪里 showDialoge(另一个 iframe),我都无法检测到这个事件。即使这个事件被添加到主 iframe 的主体和整个网页中,我也无法检测到相同的事件。请帮忙。

我正在使用 OpenText Cordys 框架 XFORMs / JavaScript

目前没有 jquery,但如果需要我可以使用。

【问题讨论】:

    标签: javascript html iframe cordys-opentext


    【解决方案1】:

    如果您的文件在同一台服务器上,您可以从子 iframe 中调用父窗口的函数,例如

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

    针对您的情况,另一种可能的解决方案是在您的子 iframe 的父级 url 中传递一个变量。例如window.top.location.href = "parent.html?inactive=true";,您可以在父窗口中检查此变量并执行所需的操作。

    这就是您如何将事件从父框架绑定到子框架的主体以使用jQuery 侦听keypress

    $("#child-frame").bind("load", function(){
        $(this).contents().find("body").on('keypress', function(e) {
            console.log(e.keyCode);
        });
    });
    

    【讨论】:

    • 这将需要更改我试图避免的所有子页面,因为我已经向主 iframe 添加了事件,应该在所有子 iframe 中调用该事件(显然具有不同的 id )。其次,大约有 70-80 个子页面将从仪表板(主登录页面)调用。
    • 您能否分享您的主 iframe 代码以及您在子框架@R23 中调用它的位置
    • 它是一个产品 OpenText Cordys,它将使用自己的 API 在内部调用 iframe,这只是 HTML,但没有这样的直接方法。这就是子 ifra 的调用方式 :: application.select(childBackgroundInfo.XMLDocument.documentElement.cloneNode(true),evtObj); application.showDialog(MyCases.documentElement, data, null, closeHandler, false);这两个 API 用于在不同的 iframe 中打开子页面。
    • 但是为什么我的主要 iframe 事件在子 iframe 中不起作用?对此有何意见?
    • 从上面的代码看不出太多。可能他们没有绑定到孩子身上的任何东西。这是肯定的,您必须自己绑定它们,即使父级中存在代码,浏览器也不会将其传递给子级本身。 @R23
    【解决方案2】:

    如果我理解您的问题,它与事件传播有关。我承认我对 iframe 不太熟悉。请参阅此其他帖子。 What is event bubbling and capturing?

    除了您的问题,理想情况下您应该通过会话来管理它。 15 分钟后结束会话。如果用户未经授权,即未登录,则将其发送到主页。

    【讨论】:

    • 但在这种情况下会话将在每 15 分钟后过期,即使用户正在做某事与否。如果用户在页面上处于活动状态并且计时器为 15 分钟,那么系统也会将他注销并重定向到登录页面,这里不建议这样做...请帮助
    • 这不是真的。如果他们没有向服务器发出请求,它将在 15 分钟后过期。否则会话超时刷新。这当然取决于框架。
    【解决方案3】:

    system.windows 将返回您打开的应用程序的窗口对象。您可以将事件处理程序附加到所有窗口并执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2023-03-14
      • 1970-01-01
      • 2013-02-11
      • 2011-06-04
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多