2012-03-09 133 views
10

有什麼辦法可以檢測到IE8中窗口當前處於活動狀態(正在顯示在活動選項卡/窗口中)?有沒有什麼辦法可以檢測IE8當前活動的窗口?

我知道有像onfocusin/onfocus事件 - 但是這不是一個完美的解決方案,因爲窗口也必須接收焦點的事件被解僱 - 因此,當用戶只需切換標籤頁也不會觸及這不起作用窗戶本身。

我相信這樣的普通用例必須有一些簡單而優雅的解決方案。

+0

要做到這一點,最好的辦法是使用網頁瀏覽權限API。但是,此API在舊版瀏覽器中不可用。我寫了一個jQuery插件,它使用可用的最佳API來檢測頁面是否可見:http://stackoverflow.com/a/9634295/96656 – 2012-03-09 13:13:27

回答

0

這是一個簡單task實現使用jQuery:

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

全局isActive變量確定閹羊的標籤/窗口是acive。

+0

不幸的是,並不那麼簡單。在IE中試試這個 - 事件處理程序將被調用來每次點擊文檔,這不是非常有效。請參閱[我的答案](http://stackoverflow.com/a/9634295/96656)瞭解優化的解決方案。 – 2012-03-09 12:51:25

+0

對於一個跨瀏覽器並處理使用'.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

2
 

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; 
} 
 
12

我寫了一個jQuery插件,做到這一點:http://mths.be/visibility它給你一個非常簡單的API,允許你執行回調時,頁面的可見性狀態的變化。

它通過在支持它的地方使用the Page Visibility API並在舊版瀏覽器中回落到舊版本focusblur

演示:http://mathiasbynens.be/demo/jquery-visibility

這個插件僅僅提供了兩個自定義事件供您使用:showhide。當頁面可見性狀態改變時,相應的事件將被觸發。

可以分開使用它們:

$(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 
} 
+0

謝謝你的回答。我查看了網頁,IE10中包含了Page Visibility API。看起來對於舊版本,我們必須堅持做得很好 - 不是非常好的模糊/焦點:) – 2012-03-09 13:56:12

+1

如果用戶在頁面上切換另一個程序,這也不起作用。只需在標籤之間切換即可。 – xecute 2013-04-01 13:59:34

+0

對於一個跨瀏覽器並處理使用'.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

0
<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> 
相關問題