有什麼辦法可以檢測到IE8中窗口當前處於活動狀態(正在顯示在活動選項卡/窗口中)?有沒有什麼辦法可以檢測IE8當前活動的窗口?
我知道有像onfocusin
/onfocus
事件 - 但是這不是一個完美的解決方案,因爲窗口也必須接收焦點的事件被解僱 - 因此,當用戶只需切換標籤頁也不會觸及這不起作用窗戶本身。
我相信這樣的普通用例必須有一些簡單而優雅的解決方案。
有什麼辦法可以檢測到IE8中窗口當前處於活動狀態(正在顯示在活動選項卡/窗口中)?有沒有什麼辦法可以檢測IE8當前活動的窗口?
我知道有像onfocusin
/onfocus
事件 - 但是這不是一個完美的解決方案,因爲窗口也必須接收焦點的事件被解僱 - 因此,當用戶只需切換標籤頁也不會觸及這不起作用窗戶本身。
我相信這樣的普通用例必須有一些簡單而優雅的解決方案。
這是一個簡單task實現使用jQuery:
$(function() {
window.isActive = true;
$(window).focus(function() { this.isActive = true; });
$(window).blur(function() { this.isActive = false; });
});
全局isActive變量確定閹羊的標籤/窗口是acive。
不幸的是,並不那麼簡單。在IE中試試這個 - 事件處理程序將被調用來每次點擊文檔,這不是非常有效。請參閱[我的答案](http://stackoverflow.com/a/9634295/96656)瞭解優化的解決方案。 – 2012-03-09 12:51:25
對於一個跨瀏覽器並處理使用'.blur | .focus'產生的「問題」的插件,請嘗試在此處查看答案 - > [是否有方法檢測瀏覽器窗口當前是否處於活動狀態? ](http://stackoverflow.com/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-currently-active#answer-16043687) – SpYk3HH 2013-12-02 18:47:39
var isActive = false;
function onBlur() {
isActive = false;
};
function onFocus(){
isActive = true;
};
if (/*@[email protected]*/false) { // check for Internet Explorer
document.onfocusin = onFocus;
document.onfocusout = onBlur;
} else {
window.onfocus = onFocus;
window.onblur = onBlur;
}
我寫了一個jQuery插件,做到這一點:http://mths.be/visibility它給你一個非常簡單的API,允許你執行回調時,頁面的可見性狀態的變化。
它通過在支持它的地方使用the Page Visibility API並在舊版瀏覽器中回落到舊版本focus
和blur
。
演示:http://mathiasbynens.be/demo/jquery-visibility
這個插件僅僅提供了兩個自定義事件供您使用:show
和hide
。當頁面可見性狀態改變時,相應的事件將被觸發。
可以分開使用它們:
$(document).on('show', function() {
// the page gained visibility
});
......還有......
$(document).on('hide', function() {
// the page was hidden
});
由於大部分的時間你需要這兩個事件,最好的選擇是使用一個事件的地圖。這樣一來,就可以一氣呵成地結合事件處理程序:
$(document).on({
'show': function() {
console.log('The page gained visibility; the `show` event was triggered.');
},
'hide': function() {
console.log('The page lost visibility; the `hide` event was triggered.');
}
});
該插件將檢測的網頁瀏覽權限API在瀏覽器原生支持與否,並揭露這一信息作爲一個布爾(true
/false
)在$.support.pageVisibility
:
if ($.support.pageVisibility) {
// Page Visibility is natively supported in this browser
}
謝謝你的回答。我查看了網頁,IE10中包含了Page Visibility API。看起來對於舊版本,我們必須堅持做得很好 - 不是非常好的模糊/焦點:) – 2012-03-09 13:56:12
如果用戶在頁面上切換另一個程序,這也不起作用。只需在標籤之間切換即可。 – xecute 2013-04-01 13:59:34
對於一個跨瀏覽器並處理使用'.blur | .focus'出現的「問題」的插件,請嘗試在此處查看答案 - > [是否有方法檢測瀏覽器窗口當前是否處於活動狀態? ](http://stackoverflow.com/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-currently-active#answer-16043687) – SpYk3HH 2013-12-02 18:46:18
<script>
// Adapted slightly from Sam Dutton
// Set name of hidden property and visibility change event
// since some browsers only offer vendor-prefixed support
var hidden, state, visibilityChange;
if (typeof document.hidden !== "undefined") {
hidden = "hidden";
visibilityChange = "visibilitychange";
state = "visibilityState";
} else if (typeof document.mozHidden !== "undefined") {
hidden = "mozHidden";
visibilityChange = "mozvisibilitychange";
state = "mozVisibilityState";
} else if (typeof document.msHidden !== "undefined") {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
state = "msVisibilityState";
} else if (typeof document.webkitHidden !== "undefined") {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
state = "webkitVisibilityState";
}
// Add a listener that constantly changes the title
document.addEventListener(visibilityChange, function() {
document.title = document[state];
}, false);
// Set the initial value
document.title = document[state];
</script>
要做到這一點,最好的辦法是使用網頁瀏覽權限API。但是,此API在舊版瀏覽器中不可用。我寫了一個jQuery插件,它使用可用的最佳API來檢測頁面是否可見:http://stackoverflow.com/a/9634295/96656 – 2012-03-09 13:13:27