2

私はこれを使用していますが、最近までie8で正しく機能していないことに気づいていませんでした。

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

Firefox、Chrome、またはSafariでは、これにより、ウィンドウのフォーカスが失われたときにアラートが適切に表示されます。ただし、IE8では、アラートはある種のキューに入れられているようです。「失われた」というアラートは、ウィンドウがフォーカスを取り戻したときにのみ表示されます。さらに紛らわしいのは、ウィンドウがフォーカスを獲得したかどうかを追跡するイベントと組み合わせると、順序が狂うことです。

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

(アラートはある種のサイクルに入るので、chromeやfirefoxでこれを試さないでください)

これらの両方がIE8で使用されている場合、ウィンドウがフォーカスを失い、その後再びフォーカスを取り戻すと、IE8は「獲得」ok「喪失」を警告します。この順不同のイベントの発生は、後方にあるためコードの問題を引き起こし、最後のイベントはブラウザーがフォーカスを失ったことを報告します。

IE8でこれを追跡するにはどうすればよいですか?

4

2 に答える 2

4

アプローチのクレジット: https://stackoverflow.com/a/10999831/1026459

私の状況の解決策:

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

これは実際に間隔を制御しますが、それは重要ではありません。onfocusoutie8、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");
    });
于 2012-11-27T00:04:06.130 に答える
1

これを 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 以外) では、ユーザーがウィンドウを表示できなくなった場合にのみアクティブ化されます (スイッチなど)。タブ、またはブラウザーを最小化しますが、別のアプリケーションまたはモニターに変更する場合はそうではありません)。個人的には、ウェブサイトをまだ見ているが別のア​​プリケーションとやり取りしている間にウェブサイトを変更したくないことを考えると、その動作を好みます。

于 2012-11-27T00:13:13.387 に答える