8

ユーザーがページを離れたとき (新しいタブを開くなど) を検出して、カウントダウンを停止できるようにしたい。私はそれを使ってそれをしました:

$(window).blur(function() {
 //stop countdown
});

しかし、ページ内に Iframe があり、ユーザーがクリックするとカウントダウンも停止しますが、誰かが Iframe をクリックしたときに上記のイベントを実行したくありません。

何か案が?

更新、この回答Click-event on iframe?に基づいて、もう少し試していますか? :

iframeDoc = $('iframe').contents().get(0);
$(iframeDoc).click(function(){
   //maybe remove blur event?
});

更新:Tim B ソリューションが機能しました:

$(window).blur(function () {
// check focus
if ($('iframe').is(':focus')) {
    // dont stop countdown
}
else {
    // stop countdown
}                
});

これで、ぼかしイベントが呼び出されるたびに Iframe からフォーカスを削除する必要があります。そうしないと、ユーザーが Iframe にフォーカスした後にタブを変更しても、カウントダウンは停止しません。上記の条件を使用して、次のように試しました。

if ($('iframe').is(':focus')) {
    // dont stop countdown
    $("iframe").blur()
    $(window).focus();
}

しかし、うまくいきませんでした。何か案が?

4

3 に答える 3

5

1 つの解決策は、iframe にフォーカスがあるかどうかを確認し、タイマーを停止しないことです。例えば

$(window).blur(function () {
    // check focus
    if ($('iframe').is(':focus')) {
        // dont stop countdown
    }
    else {
        // stop countdown
    }                
});

これで機能しますが、ユーザーがタブを変更したときに iframe にフォーカスがある場合、カウントダウンは停止しません。したがって、この状況では、フォーカスを iframe プリファードから遠ざけるエレガントなソリューションを考える必要があります。たとえば、ユーザーが iframe 内をクリックすると、フォーカスがすぐに親ウィンドウに戻ります。

編集 - 追加の iframe 機能を含めるように回答を更新しました

わかりましたので、私はこれで遊んでいます。iframe 内にどのようなコンテンツがあるかはわかりませんが、これにコードを追加して、クリックすると基本的に親ウィンドウ内のオブジェクトにフォーカスを戻すことができます。例えば

iFrame で

<script>
    $(function () {
        $(document).click(function () {
            // call parent function to set focus
            parent.setFocus();
        });
    });
</script>

あなたのメインページで

<script>

    function setFocus() {
        // focus on an element on your page.
        $('an-element-on-your-page').focus();
    }

    $(function () {

        $(window).focus(function (e) {
            // bind the blur event
            setBindingEvent();
        });

        var setBindingEvent = function () {
            // unbind
            $(window).unbind('blur');
            $(window).blur(function () {
                // check focus
                if ($('iframe').is(':focus')) {
                    // unbind the blur event
                    $(window).unbind('blur');
                }  
                else {
                    // stop countdown
                }                
            });
        };

        setBindingEvent();

    });
</script>

これにより、iframe をクリックし、フォーカスをメイン ページに戻してから、カウントダウンを停止できます。

于 2013-04-16T13:29:31.873 に答える
1

iframe は分離されているため、その内部をクリックすると、親のぼかしとしてカウントされます。iframe のコンテンツを ajax で取り込めるなら、その方が良いでしょう。

于 2013-04-16T13:10:01.947 に答える