2013-02-01 14 views
11

Po prostu czytam, myślę, że wszystkie wątki, które dotyczą tego tematu, i nie mogę znaleźć prawdziwego rozwiązania mojego problemu. Muszę wykryć, kiedy okno przeglądarki traci ostrość, tj. Zdarzenie blur. Próbowałem już wszystkich skryptów na stackoverflow, ale wydaje się, że nie ma odpowiedniego podejścia opartego na różnych przeglądarkach.Między przeglądarkami: wykryj zdarzenie rozmycia w oknie

Firefox jest tutaj problematyczną przeglądarką.

Wspólne podejście przy użyciu jQuery jest:

window.onblur = function() { 
    console.log('blur'); 
} 
//Or the jQuery equivalent: 
jQuery(window).blur(function(){ 
    console.log('blur'); 
}); 

To działa w Chrome, IE i Opera, Firefox, ale nie wykrywa zdarzenie.

Czy istnieje odpowiedni sposób na wykrycie zdarzenia zacierającego okno w wielu przeglądarkach? Lub, inaczej zapytany, czy istnieje sposób na wykrycie zdarzenia rozmycia okna w przeglądarce Firefox?


Powiązane pytania i badania:

+1

Sprawdź ten wpis: http://support.mozilla.org/en-US/questions/806756#answer-167267 –

+0

Ok, więc jeśli dobrze rozumiem, nie ma sposobu, aby zmusić do FF rozumiem to wydarzenie. – M4nch4k

+1

window.onblur = function() {alert ("blur"); } <= Działa to również na firefox. – Sandeep

Odpowiedz

1

Można użyć metody rozmycia jQuery na okno, tak jak poniżej:

$(document).ready(function() { 
    $(window).blur(function() { 
    // Put your blur logic here 
    alert("blur!"); 
    }); 
}); 

Działa to w Firefox, IE, Chrome i Opera.

+0

jest już w jego pytaniu i nie działał dla niego. –

+0

Przepraszam, powinienem był powiedzieć, że okno traci fokus z elementu iframe, jak przycisk twitter. To nie działa z twoim kodem. – M4nch4k

+0

To zadziałało dla mnie. – BananaNeil

1

The document.hasFocus (MDN) jest implementacją, która może rozwiązać problem z Firefoksem, ale w Operze nie jest obsługiwana. Tak więc połączone podejście może pomóc rozwiązać problem, z którym się borykasz.

Poniższa funkcja jest przykładem, jak można wykorzystać tę metodę:

function getDocumentFocus() { 
    return document.hasFocus(); 
} 

Od Twoje pytanie nie jest wystarczająco jasne, o wniosku (Tymczasowy pub/podsystemu, zdarzeniami itp), można użyć funkcja powyżej na kilka sposobów.

Na przykład weryfikacja czasowa może być podobna do tej wprowadzonej w tym skrzypcach (JSFiddle).

+0

Dzięki! Właściwie to wypróbowałem 'document.hasFocus()' w pętli 'setInterval()' w zeszłym tygodniu, ale nie działało. Popracuję nad twoim przykładem i zobaczę, czy mogę powtórzyć udany wynik ... doceń odpowiedź. – tohster

+0

Pomyślałem, że spróbowałeś tego, ale jak powiedziałem: w zależności od podejścia, może jedna metoda może wykonać to zadanie. Daj mi znać, jeśli program pomógł :) –

0

Próbowałem przy użyciu funkcji addEventListener DOM

window.addEventListener('blur', function(){console.log('blur')}); 
window.addEventListener('click', function(event){console.log(event.clientX)}); 

mam go do pracy po pierwszym rozmycia. ale nie działało, gdy nie miałem do niego dołączonej funkcji kliknięcia. Nie może być jakiś rodzaj odświeżenia, co dzieje się, gdy funkcja click jest interpretowany

4

Próbowałem zarówno:

document.addEventListener('blur', function(){console.log('blur')}); 

i

window.addEventListener('blur', function(){console.log('blur')}); 

i oboje pracowali w mojej wersji FF (33,1).

Oto jsfiddle: http://jsfiddle.net/hzdd06eh/

Kliknij wewnątrz okna „run”, a następnie kliknij poza to, aby wywołać efekt.

+0

Testowany w Windowsie i wersji Ubuntu Firefox 30 + ... oba działały. Ładnie wykonane! – tohster

1

Oto alternatywne rozwiązanie dla twojego pytania, ale używa ono i jest kompatybilne z Cross Browser.

(function() { 
    var hidden = "hidden"; 

    // Standards: 
    if (hidden in document) 
     document.addEventListener("visibilitychange", onchange); 
    else if ((hidden = "mozHidden") in document) 
     document.addEventListener("mozvisibilitychange", onchange); 
    else if ((hidden = "webkitHidden") in document) 
     document.addEventListener("webkitvisibilitychange", onchange); 
    else if ((hidden = "msHidden") in document) 
     document.addEventListener("msvisibilitychange", onchange); 
    // IE 9 and lower: 
    else if ("onfocusin" in document) 
     document.onfocusin = document.onfocusout = onchange; 
    // All others: 
    else 
     window.onpageshow = window.onpagehide = window.onfocus = window.onblur = onchange; 

    function onchange(evt) { 
     var v = "visible", 
      h = "hidden", 
      evtMap = { 
       focus: v, 
       focusin: v, 
       pageshow: v, 
       blur: h, 
       focusout: h, 
       pagehide: h 
      }; 

     evt = evt || window.event; 
     if (evt.type in evtMap) { 
      console.log(evtMap[evt.type]); 
     } else { 

      console.log(this[hidden] ? "hidden" : "visible"); 
     } 
    } 

    // set the initial state (but only if browser supports the Page Visibility API) 
    if (document[hidden] !== undefined) 
     onchange({ 
      type: document[hidden] ? "blur" : "focus" 
     }); 
})(); 
Powiązane problemy