2013-06-08 5 views
0

iframe에 다른 웹 사이트를로드하는 페이지가 있습니다. 문제는 이제 맨 위 창이 흐려지면 카운터를 중지해야하는 경우 기록해야한다는 것입니다. iframe을 클릭하면이 창에 초점이 맞춰지고 커서를 가져간 후에 포커스를 맨 위 창으로 되돌릴 수 없습니다. 따라서 브라우저에서 다른 탭을 클릭하면이 윈도우의 실제 흐림 기능이 호출되지 않습니다. 필요한 것은 iframe을 클릭하고 커서가 mouseleave를 사용하여 iframe에서 뒤로 이동 한 후 원래 포커스를 맨 위 창으로 되돌려 보내는 방법입니다.iframe로드 함수의 간격이 두 번 계산되어 중지 할 수 없습니다.

나는 stackoverflow에서 찾은 것이지만 나에게 어울리지 않는 몇 가지 방법을 시도했다.

은 다음과 비슷한 모습이 될 것입니다

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

EDIT 해결 과정하지만 사항 clearInterval 지금은 작동하지 :

나는 위의 코드에 대한 답을 가지고 있지 않았기 때문에 나는이 일을 다른 무언가를 시도했다. 나는 몸을 확인했고 마우스가 떠날 때 그 간격을 멈췄다. 이것은 나를 위해 충분했다. 하지만 iframe이로드되었을 때 카운터를 시작하는 것이 좋을 것이므로 $('iframe').load 함수 내부에 간격을 넣으려고했습니다. 그러나 그 일은 두 번 세어 볼 수 있습니다. 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); 
}); 

누군가가 여기에서 무슨 일이 일어나고 있는지 알고 싶습니다. 고맙습니다.

답변

0

교체 :

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

을 위해 :

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

트릭을했다.

왜로드 기능이 각 간격에 대해 내부 간격을 두 번 호출했는지 아직도 알 수 없습니다. 누군가가 이것을 설명 할 수 있다면 좋을 것입니다. 어쨌든 고마워.

편집 :

나는 내가 두 번 간격을 루프 이유를 알 것 같아요. iframe 내부의 링크 (로드 된 웹 사이트)를 클릭 할 때마다이 함수는 이것을 페이지로드로 캡처합니다. 내가 이것을 방지하기 위해 수행 한 작업은 iframe이 "iframe_loaded"처럼 처음으로로드 될 때 body에 클래스를 추가하고 사용자가 iframe 내부의 링크를 클릭하면 body가 이미이 클래스를 가지고 있는지를 확인한 후 간격 함수를 두 번 출력하지 마십시오.