2010-08-13 3 views
24

Есть ли способ, когда я нажимаю на свой браузер и фокусирую его, чтобы запустить метод один раз? А затем, когда браузер теряет фокус, а затем снова получает фокус, чтобы снова запустить этот метод только один раз.событие браузера для window.focus()

Thanks,

удилище.

ответ

39

Вы можете прикрепить focus и blur обработчиков событий на window объекта для отслеживания, если окно получает или теряет фокус (см http://jsfiddle.net/whQFz/ для простейшего примера). window применяется к текущему контексту браузера (так что это может быть окно, вкладка, кадр и т. Д.).

Примечание:focus события будет срабатывать каждый раз, когда окно получает фокус и blur события будет срабатывать каждый раз, когда оно теряет фокус. Примером чего-то, что отвлекает внимание от окна, является окно alert. Если вы попытаетесь оповестить об ошибке в обработчике событий onfocus, вы получите бесконечный цикл предупреждений!

// Set global counter variable to verify event instances 
var nCounter = 0; 

// Set up event handler to produce text for the window focus event 
window.addEventListener("focus", function(event) 
{ 
    document.getElementById('message').innerHTML = "window has focus " + nIndex; 
    nCounter = nCounter + 1; 
}, false); 

// Example of the blur event as opposed to focus 
// window.addEventListener("blur", function(event) { 
// document.getElementById('message').innerHTML = "window lost focus"; }, 
// false); 
+5

Как это с совместимостью браузеров? –

12
$(document).ready(function() { $(window).one("focus", SomeFocusMethod); }); 

var SomeFocusMethod = function() 
{ 
    // do stuff 
    $(window).one("blur", SomeBlurMethod); 
} 

var SomeBlurMethod = function() 
{ 
    // do stuff 
    $(window).one("focus", SomeFocusMethod); 
} 
+2

Пожалуйста, включите комментарий для нисходящего потока, как это появляется, по крайней мере, для меня, чтобы быть приемлемым дополнением к этому вопросу. –

+0

Это не приемлемый ответ, так как нет метода .one(), существует только метод .on(), я исправил ответ. –

+11

В jQuery существует «один» метод, и это весьма удобно: https://api.jquery.com/one/ – Lindsay

4

Если вы ориентируетесь браузеров новее, чем IE9 вы действительно должны использовать "Page Visibility API" JavaScript браузер апи: https://developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API

+3

Это не помогает в случае, когда окно браузера все еще отображается, но не в фокусе. – Domi

Смежные вопросы