2010-08-13 40 views
74

Làm cách nào để kiểm tra xem trình duyệt có tập trung không?JavaScript/jQuery: Kiểm tra xem cửa sổ có tập trung

+0

Xem thêm http://stackoverflow.com/questions/483741/how-to-determine-which-html-page-element-has-focus cũng có thể trả lời câu hỏi này. –

+15

Thử 'document.hasFocus()', trả về boolean. Nó được tích hợp vào thông số kỹ thuật, vì vậy nó có thể được thực hiện mà không cần jQuery. –

Trả lời

74

Tôi chưa thử nghiệm điều này trong các trình duyệt khác, nhưng có vẻ như nó hoạt động trong Webkit. Tôi sẽ cho bạn thử IE. : O)

Hãy thử nó ra:http://jsfiddle.net/ScKbk/

Sau khi bạn nhấp vào để bắt đầu khoảng thời gian, thay đổi trọng tâm của cửa sổ trình duyệt để xem sự thay đổi kết quả. Một lần nữa, chỉ được thử nghiệm trong Webkit.

var window_focus; 

$(window).focus(function() { 
    window_focus = true; 
}).blur(function() { 
    window_focus = false; 
}); 

$(document).one('click', function() { 
    setInterval(function() { 
     $('body').append('has focus? ' + window_focus + '<br>'); 
    }, 1000); 
});​ 
+0

@jball - Phải là IE? Trong Webkit và Firefox, mọi kích hoạt của cửa sổ sẽ kích hoạt tiêu điểm. Tôi tự hỏi nếu có một giải pháp cho IE. Ngoài ra, bạn đã thử nghiệm trên trang của mình chưa? Có thể có vấn đề vì jsFiddle sử dụng khung? – user113716

+0

Ngoài ra, nhấn phím tab có vẻ như sẽ phá vỡ nó vĩnh viễn. – jball

+0

Chrome thực sự. Sau khi thử nghiệm thêm, nhận xét đầu tiên của tôi có thể sai - phím tab phá vỡ nó có vẻ phù hợp hơn. – jball

155

sử dụng phương pháp hasFocus của tài liệu. Bạn có thể tìm mô tả chi tiết và một ví dụ ở đây: hasFocus method

EDIT: Added fiddle http://jsfiddle.net/Msjyv/3/

HTML

Currently <b id="status">without</b> focus... 

JS

function check() 
{ 
    if(document.hasFocus() == lastFocusStatus) return; 

    lastFocusStatus = !lastFocusStatus; 
    statusEl.innerText = lastFocusStatus ? 'with' : 'without'; 
} 

window.statusEl = document.getElementById('status'); 
window.lastFocusStatus = document.hasFocus(); 

check(); 
setInterval(check, 200); 
+3

Tôi đã thử ví dụ từ liên kết ở trên và nó hoạt động tốt trong IE7 +, Chrome và FF4. 1 cho bạn. –

+1

Chức năng nhỏ tuyệt vời, hoạt động tốt hơn nhiều so với các jQuery tương đương khác mà tôi đã chạy qua. – Heath

+3

Hữu ích hơn câu trả lời được chấp nhận, tôi gặp sự cố khi tải bộ hẹn giờ trong khi cửa sổ bị mất tiêu điểm. – Kokos

1

HTML:

<button id="clear">clear log</button> 
<div id="event"></div>​ 

Javascript:

$(function(){ 

    $hasFocus = false; 

    $('#clear').bind('click', function() { $('#event').empty(); }); 

    $(window) 
     .bind('focus', function(ev){ 
      $hasFocus = true; 
      $('#event').append('<div>'+(new Date()).getTime()+' focus</div>'); 
     }) 
     .bind('blur', function(ev){ 
      $hasFocus = false; 
      $('#event').append('<div>'+(new Date()).getTime()+' blur</div>'); 
     }) 
     .trigger('focus'); 

    setInterval(function() { 
     $('#event').append('<div>'+(new Date()).getTime()+' has focus '+($hasFocus ? 'yes' : 'no')+'</div>'); 
    }, 1000); 
});​ 

test

UPDATE:

tôi sẽ sửa chữa nó, nhưng IE không hoạt động rất tốt

test update

+0

Không nhất quán làm việc trong IE8 trong thử nghiệm của tôi. –

+0

Dường như mờ không phát ra khi chuyển tab. :( –

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