2017-03-29 3 views
0

Ich habe Anforderung, wo ich Inaktivität der Webseite erkennen muss und wenn Benutzer für mehr als 15 min inaktiv ist, dann Benutzer sollte abgemeldet werden.Für Zu diesem Zweck versuche ich die Inaktivität des Benutzers zu erkennen, indem ich click/keypress Ereignisse auf die ganze ganze Seite und auch auf den Haupt iframe anhefte.Click Ereignis hinzugefügt, um Eltern Iframe (Körper) funktioniert nicht in Kind Iframe (Körper)

Das Problem hier ist ich kann keypress/click Ereignis auf der Hauptseite (Main iframe) erkennen, aber wo auch immer showDialoge (ein anderes iframe), ich bin nicht in der Lage, dieses Ereignis zu erkennen. Obwohl diese Ereignisse zum Hauptteil von iframe und auch zur ganzen Webseite hinzugefügt werden, kann ich sie nicht erkennen. Bitte helfen Sie.

Ich verwende OpenText Cordys Framework XFORMs/JavaScript.

Kein jquery ab sofort, aber wenn erforderlich kann ich verwendet werden.

Antwort

0

Wenn ich Ihr Problem verstehe, hat es mit der Ereignisausbreitung zu tun. Ich gebe jedoch zu, dass ich mit Iframes weniger vertraut bin. Siehe diesen anderen Beitrag. What is event bubbling and capturing?

Abgesehen von Ihrer Frage sollten Sie dies idealerweise über Sitzungen verwalten. Verlasse die Sitzung nach 15 Minuten. Wenn der Benutzer nicht autorisiert ist (aka nicht angemeldet), senden Sie ihn an die Hauptseite.

+0

Aber in diesem Fall Sitzung nach jeder min 15 abgelaufen verwenden werden, für das Hören binden kann, auch wenn Benutzer etwas oder nicht tut. Wenn der Benutzer auf der Seite aktiv ist und der Timer 15 Minuten beträgt, wird auch das System ihn abmelden und auf die Login-Seite umleiten, das ist hier nicht ratsam ... Bitte helfen Sie – R23

+0

Das ist nicht wahr. Es wird in 15 Minuten ablaufen, wenn sie keine Anfragen an den Server stellen. Andernfalls wird das Sitzungszeitlimit aktualisiert. Dies hängt natürlich vom Rahmen ab. – asarenski

1

Wenn Ihre Dateien auf demselben Server befinden, können Sie übergeordnete Fenster der Funktion von Kind iframe wie

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> 

Die andere mögliche Lösung nennen Für Ihren Fall übergeben Sie eine Variable in der url des Elternteils von Ihrem Kind Iframe. Zum Beispiel window.top.location.href = "parent.html?inactive=true"; und im übergeordneten Fenster können Sie nach dieser Variable suchen und die erforderliche Aktion ausführen.

Dies ist, wie Sie ein Ereignis von den Eltern auf Körper des Kindes Rahmen keypressjQuery

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

Dies erfordert Änderungen in allen untergeordneten Seiten, die ich vermeiden möchte, da ich bereits ein Ereignis zum Haupt-iframe hinzugefügt habe, das in allen untergeordneten Iframes (die offensichtlich unterschiedliche IDs haben) aufgerufen werden sollte. Zweitens gibt es etwa 70-80 Kinderseiten, die aus dem Dashboard (Hauptlandepage) aufgerufen werden. – R23

+0

Können Sie bitte teilen Sie Ihren Code der Haupt iframe und wo Sie es innerhalb Kind Frame @ R23 anrufen – AZee

+0

Es ist ein Produkt OpenText Cordys, die iframe intern mit seinen eigenen APIs aufrufen, die nichts anderes als HTML ist, aber nicht solche direkte Methode haben. So heißt das Kind-ifram :: application.select (childBackgroundInfo.XMLDocument.documentElement.cloneNode (true), evtObj); application.showDialog (MyCases.documentElement, Daten, null, closeHandler, false); Diese zwei APIs werden zum Öffnen der untergeordneten Seiten in verschiedenen Iframes verwendet. – R23

Verwandte Themen