2012-06-18 5 views
7

일련의 팝업 페이지 (모바일 사파리의 새로운 탭)가 있습니다. 이러한 각각의 팝업은 포커스가 맞춰 졌는지 여부를 알아야합니다. 데스크톱에서는이 동작을 위해 window.onblurwindow.onfocus을 사용합니다. 그러나 이러한 이벤트는 iPad에서 작동하지 않습니다. 나는 또한 적절한시기에 발사되지 않는 window.onpageshowwindow.onpagehide을 시도했다. 나는 시험 HTML 파일을 가지고있다 :모바일 사파리의 새 탭으로 이동하기.

<html> 
<head> 
<script language="javascript"> 
console.log('Hello'); 
window.onblur = function(e) { console.log('blur'); }; 
window.onfocus = function(e) { console.log('focus'); }; 
window.onpagehide = function(e) { console.log('pagehide'); }; 
window.onpageshow = function(e) { console.log('pageshow'); }; 
</script> 
</head> 
<body> 
<a href="http://www.google.com" target="_blank">Click Me</a> 
</body> 
</html> 

이론적으로, 'Click Me'를 클릭하면, 새로운 창이 나타날 때 blur 이벤트를 얻어야한다. 그러나 이것은 모바일 사파리에서 발생하지 않습니다. onpagehideonpageshow도 별다른 사랑을 보이지 않으며 탭을 닫을 시점을 감지하는 데 도움이됩니다.

모바일 사파리에서 내가 원하는 동작을 어떻게 얻을 수 있습니까? 전혀 가능합니까?

답변

4

내가 onblur 탐지 할 수 있다고 생각하지 않지만,이 onfocus 감지하는 코드입니다

다음
var timestamp=new Date().getTime(); 
function checkResume() 
{ 
    var current=new Date().getTime(); 
    if(current-timestamp>5000) 
    { 
     var event=document.createEvent("Events"); 
     event.initEvent("focus",true,true); 
     document.dispatchEvent(event); 
    } 
    timestamp=current; 
} 
window.setInterval(checkResume,50); 

방금 ​​쓰기 :

document.addEventListener("focus",function() 
{ 
    alert("Focus detected"); 
},false); 
5

시험해보기 : https://gist.github.com/1122546

Visibilty API polyfill입니다. 트릭을해야 할 것입니다.

+0

감사합니다. 그냥 티켓처럼 보입니다! –

+0

실제로 Chris Keele의 의견에 따르면 Mobile Safari에서는 작동하지 않을 수 있습니다. 나에게 내 iPad가 없다. 그가 말하는 것이 사실이라면, Mobile Safari를위한 방법이 있는가? –

+6

사실 iOS에서는 ** 작동하지 않습니다 **. – arik

0

누군가가 같은 질문을 조금 더 최근에 했으므로이 대답을 이전의 here에 링크 할 것입니다.

Mageek의 방법은 내가하고있는 것과 매우 비슷하지만 스크롤 이벤트 나 키보드가 보이면 실행됩니다. 스크롤 할 때의 동작을 방지하는 것은 그리 어려운 일은 아니지만 화면 키보드 이벤트를 찾는 일은 결코 없었습니다.

또한 내 개체는 requestAnimationFrame을 활용하고 있으며 포커스 해킹을 대체 용도로만 사용할 수 있습니다. 사용 가능한 경우 가시성 API를 사용하는 것이 좋습니다 (이상적으로는 미래 보장형으로 사용하는 것이 이상적입니다).

+0

탭에 다시 들어 왔을 때만 알 수 있습니다. 맞습니까? 나는이 코드가있는 탭이 더 이상 화면 상에 나타나지 않고 탭이 다시 열리기 전에 그것을 알고 싶습니다. –

관련 문제