0

iframe に別の Web サイトを読み込むページがあります。現在の問題は、上部のウィンドウがぼやけている場合にログを記録する必要があり、そうであればカウンターを停止する必要があることです。iframe をクリックすると、このウィンドウがフォーカスされ、ホバリングした後、トップ ウィンドウにフォーカスを戻すことができません。そのため、ブラウザで別のタブをクリックしても、このウィンドウの実際のぼかし機能は呼び出されません。私が必要としているのは、iframe がクリックされ、マウスリーブでカーソルが iframe の外に移動した後、元のフォーカスをトップ ウィンドウに戻す方法です。

私はstackoverflowで見つけたこのようなことをするためにいくつかの方法を試しましたが、私には合いません。

次のようになります。

$('iframe').mouseleave(function()
{
    $(window.top).focus();
});
$(window).blur(function()
{
    console.log('window blur'); 
});

回避策を編集しますが、現在 clearInterval が機能していません:

上記のコードに対する回答が得られなかったので、別の方法を試してみました。体をチェックしたところ、マウスが離れるとインターバルが止まりました。私にはこれで十分でした。しかし、iframe がロードされたときにカウンターを開始するのもいいので、$('iframe').load関数内に間隔を入れようとしました。しかし、何が起こるかというと、間隔は 2 回カウントされます。1秒の間隔が必要な場合は、2秒になります。マウスが体から離れると、間隔は停止しませんが、停止する代わりに 1 秒に戻します。コードの下:

var $interval = '';
$('body').mouseleave(function()
{
    clearInterval($interval);
    $('.message').html('<div class="alert alert-error"><button type="button" class="close" onclick="javascript:window.opener=\'x\';window.close();">×</button>You may not navigate away from advertisements! Click <a href="">here</a> to try again.</div>');
});
$("iframe").load(function()
{
    $interval = setInterval(function()
    {
        clearInterval($interval);
        console.log('clear interval not working when inside iframe load function');
    }, 1000);
});

ここで何が起こっているのか誰かが知っていることを願っています。ありがとうございました。

4

1 に答える 1

0

交換:

$("iframe").load(function()

為に:

document.getElementById("website").onload = function() 

トリックをしました。

load 関数が間隔ごとに内側の間隔を 2 回呼び出した理由はまだわかりません。誰かがこれを説明できれば、それはいいでしょう。とにかくありがとう。

編集:

間隔を2回ループする理由はわかっていると思います。iframe (読み込まれた Web サイト) 内のリンクをクリックするたびに、関数はこれをページ読み込みとしてキャプチャします。これを防ぐために私がしたことは、「iframe_loaded」のように iframe が最初に読み込まれたときに本体にクラスを追加し、ユーザーが iframe 内のリンクをクリックした後、最初に本体に既にこのクラスがあるかどうかを確認し、そうであれば間隔関数を再度出力しません。

于 2013-06-09T16:18:14.043 に答える