簡體   English   中英

如何判斷IE8窗口何時失去焦點?

[英]How to tell when the IE8 window loses focus?

我一直在使用它,盡管直到最近我才意識到它在ie8中無法正常運行。

$(window).blur(function () {
 alert("lost");
});

在Firefox,Chrome或Safari中,當窗口失去焦點時,這會適當地導致顯示警報。 但是,在IE8中,警報似乎已放入某種隊列中。 警報“丟失”僅在窗口重新獲得焦點時顯示。 更令人困惑的是,當與跟蹤窗口是否獲得焦點的事件結合使用時,它們會混亂。

$(window).focus(function () {
 alert("gained");
});

(請勿在chrome或Firefox中嘗試此操作,因為警報會進入某種循環)

如果這兩個都與IE8,當窗口失去焦點,並重新獲得其使用,IE8警報“獲得了” ok “丟失”。 這種亂序事件觸發會導致我的代碼問題,因為它是向后的,並報告最后一個事件是瀏覽器失去焦點。

如何在IE8中跟蹤此內容?

方法的功勞: https : //stackoverflow.com/a/10999831/1026459

我的情況的解決方案:

document.onfocusout = function(){
 alert("lost");
};

這實際上控制了一個時間間隔,但這不是重點。 onfocusout適用於ie8, chrome,safari和ff 我不確定ie8出現什么blur問題,但我正在逐步淘汰它。

編輯

不幸的是document.onfocusout在chrome或safari中不起作用,所以我不得不做更多的解決方法。 這就是我最后得到的。

    //ie workaround
    document.onfocusout = function(e){
        if( e === undefined ){//ie
            var evt = event;//ie uses event
            if( evt.toElement == null ){//check where focus was lost to
             console.log("lost");
            }
        }
    };

    window.onblur = function(e){
     if( e !== undefined ){//ie will have an undefined e here, so this screens them out
      console.log("lost");
     }
    };

    $(window).focus(function () {
     console.log("gained");
    });

在IE8中將其復制后,我測試了Mathias Bynens的頁面可見性填充程序是否起作用,並且似乎可以解決您的問題。 您可以在此處下載: http : //mths.be/visibility

我確實對測試代碼做了一些更改,以避免進入警報循環。

$(document).on({
    'show.visibility': function () {
        $(document.body).append(new Date().getTime() + '<br/>');
    },
    'hide.visibility': function () {
        $(document.body).append(new Date().getTime() + '<br/>');
    }
});

還要注意,這與$(window).blur()$(window).focus()行為稍有不同,在大多數瀏覽器(IE之外的其他瀏覽器$(window).focus() ,只要用戶單擊窗口元素外,它$(window).focus()激活僅當用戶無法再看到窗口時(例如,切換選項卡或最小化瀏覽器,而切換到其他應用程序或監視器時,才激活)。 我個人比較喜歡這種行為,因為我不想在我仍在觀看但要與其他應用程序交互時更改網站。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM