2012-06-18 39 views
7

Tôi có một loạt các trang mở cửa sổ bật lên (các tab mới trong Mobile Safari.) Mỗi ​​cửa sổ bật lên này cần biết khi nào chúng tập trung hay không. Trên máy tính để bàn, chúng tôi sử dụng window.onblurwindow.onfocus để điều khiển hành vi này. Tuy nhiên, không có sự kiện nào trong số này hoạt động trên iPad. Tôi cũng đã thử window.onpageshowwindow.onpagehide mà dường như cũng không phát ra đúng thời điểm. Tôi có một tệp HTML thử nghiệm:Phát hiện chuyển sang tab mới trong Mobile Safari

<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> 

Lý thuyết, khi bạn nhấp vào 'Nhấp vào', bạn sẽ nhận được sự kiện mờ khi cửa sổ mới xuất hiện. Nhưng điều này không xảy ra trên Mobile Safari. onpagehideonpageshow không hiển thị tình yêu nào, chúng chỉ giúp phát hiện khi bạn sắp đóng tab.

Làm cách nào để có được hành vi mà tôi đang tìm kiếm trong Mobile Safari? Có thể ở tất cả?

Trả lời

4

Tôi không nghĩ rằng onblur thể được phát hiện, nhưng đây là một mã số để phát hiện 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); 

Sau đó, bạn chỉ cần viết:

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

Hãy thử cách này: https://gist.github.com/1122546

Đó là một hàm chèn sẵn API Visibilty. Nên làm các trick.

+0

Cảm ơn bạn, có vẻ như chỉ là vé! –

+0

thực sự theo nhận xét của Chris Keele, có thể không hoạt động trong Mobile Safari. Tôi không có iPad của tôi ngay bây giờ - nếu những gì anh ấy nói là đúng, có cách nào để sử dụng Mobile Safari không? –

+6

Trên thực tế, nó không ** hoạt động trên iOS. – arik

0

Có người hỏi cùng một điều gần đây hơn một chút vì vậy tôi sẽ chỉ liên kết câu trả lời này với câu trả lời cũ của tôi here.

Phương pháp của Mageek rất giống với những gì tôi đang làm, nhưng cũng sẽ kích hoạt sự kiện cuộn hoặc khi bàn phím hiển thị. Ngăn chặn các hành vi khi di chuyển không phải là thách thức khủng khiếp, nhưng tôi không bao giờ có xung quanh để tìm kiếm các sự kiện bàn phím trên màn hình.

Đối tượng của tôi cũng tận dụng yêu cầuAnimationFrame và sẽ chỉ sử dụng trọng tâm hack làm dự phòng, chọn sử dụng API hiển thị ở nơi có sẵn (lý tưởng làm cho nó tương lai).

+0

điều này sẽ chỉ cho biết khi nào bạn quay trở lại tab, phải không? Tôi muốn biết khi nào tab có mã này không còn trên màn hình nữa, và biết nó trước khi tab được mở lại. –

Các vấn đề liên quan