2017-03-29 9 views
0

Webページの非アクティブを検出する必要があり、ユーザーが15分以上アクティブでない場合、ユーザーはログアウトする必要がありますこの目的は、クリック/キー押下イベントをページ全体に、またメインのiframeに添付して、ユーザーの非アクティブを検出しようとしています。親のiframe(body)にクリックイベントが追加されていないiframe(body)

ここでの問題は、メインページ(メインiframe)ではkeypress/clickイベントを検出できますが、showDialoge(別のiframe)がある場合は、このイベントを検出できません。このイベントはメインのiframeの本体とウェブページ全体に追加されていますが、どういうわけか私は同じものを検出できません。助けてください。

私はOpenText CordysフレームワークXFORMs/JavaScriptを使用しています。

jqueryは現在のところ使用できませんが、必要に応じて使用することができます。

答えて

0

私があなたの問題を理解している場合、それはイベントの伝播と関係しています。私はiframeにあまり慣れていませんが、私は認めます。この他の記事を参照してください。 What is event bubbling and capturing?

ご質問とは別に、セッションでこれを管理するのが理想的です。 15分後にセッションを終了します。ユーザーが承認されていない場合、ログインしていない場合は、メインページに送信します。

+0

を使用してkeypressを聴くための子フレームの体に親からイベントをバインドする方法である。しかし、この場合、セッションは、ユーザーが何かをやったりされていない場合でも、すべての15分後に期限切れになります。ユーザーがページ上でアクティブで、タイマーが15分の場合、システムも彼をログアウトし、ログインページにリダイレクトします。これはお勧めできません...助けてください – R23

+0

これは当てはまりません。サーバーに要求がない場合、15分で期限切れになります。それ以外の場合は、セッションのタイムアウトがリフレッシュされます。もちろんこれはフレームワークに依存します。 – asarenski

1

あなたのファイルが同じサーバー上にある場合、あなたは

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> 

他の可能な解決策のような子はiframeから親ウィンドウの関数を呼び出すことができますあなたのケースでは、子供のiframeから親のurlに変数を渡しています。たとえばwindow.top.location.href = "parent.html?inactive=true";とし、親ウィンドウでこの変数をチェックして必要な処理を実行できます。

これは、あなたがjQuery

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

これは、私が避けようとしているすべての子ページの変更を必要とします。これは、メインのiframeにイベントを既に追加しています。これは、すべての子iframe(呼び出されるIDは明らかに異なります)。次にダッシュボード(メインリンク先ページ)から呼び出される約70-80の子ページがあります。 – R23

+0

メインのiframeのコードと、それを子フレーム@ R23 – AZee

+0

の中で呼び出すことができますか?その製品OpenText Cordysは、iframeをHTML以外の独自のAPIを使って内部的に呼び出しますが、そのような直接的なメソッドはありません。これは、child iframが:: application.select(childBackgroundInfo.XMLDocument.documentElement.cloneNode(true)、evtObj)と呼ばれる方法です。 application.showDialog(MyCases.documentElement、data、null、closeHandler、false);この2つのAPIは、異なるiframe内の子ページを開くために使用されます。 – R23

関連する問題