2016-04-27 10 views
0

Ich erstelle eine App, die von einem Computer zu einem anderen kommunizieren wird, wenn die andere Person auf das Fenster schaut. Stellen Sie sich zum Beispiel vor, Sie chatten mit jemandem auf Facebook Chat und die andere Person ändert Tab oder Alt + Tabs oder etwas - die andere Person würde wissen (nicht die Besonderheiten, nur dass das Facebook-Fenster nicht oben und aktiv war).onblur und onfocus event aber mit iframes

Dies war schließlich einfach:

/** 
* Functions which keeps track of whether the page is the active tab 
* this reports back to the host 
*/ 
window.onblur=function(){ 
    if(conn!=null) { 
     conn.send(JSON.stringify({'type':'upd','ele':'vis','status':0})); 
    } 
    make_noise('0000'); 
}; 
window.onfocus=function(){ // when you focus the window 
    if(conn != null) { 
     conn.send(JSON.stringify({'type':'upd','ele':'vis','status':1})); 
    } 
    stop_noise('0000'); 
}; 

Dies alles funktioniert, kein Problem.

Allerdings habe ich auch einen iframe auf der Seite. Wenn der Benutzer in der iframe ist dann das onblur Ereignis ausgelöst wird und es sieht aus wie der Benutzer alt + Tabbed, ging zu einem anderen Tab usw.

ich schon versucht, diese zu beheben:

window.onblur=function(){ // when you leave the window 
    if(conn != null && (document.activeElement != document.getElementById("content_frame"))) {  
      conn.send(JSON.stringify({'type':'upd','ele':'vis','status':0})); 
     } 
    } 
    make_noise('0000'); 
}; 

jedoch, weil die iframe bleibt das activeElement, unabhängig davon, ob das Fenster gerade aktiv ist, löst dies ein falsches positives Ergebnis aus.

Kann jemand über einen Weg um dies denken? . $ (‚Iframe‘) ist (‚: Fokus‘) wurde als ein Weg vorgeschlagen, der die Prüfung der Fokus des iframe, aber dann funktioniert es genauso wie mit active ...

Vielen Dank, Alex

+0

Sowohl der Vater als auch der IFrame sind vom selben Ursprung? – 11thdimension

+0

Was meinst du mit Herkunft? :) –

+0

Sieh dir diese https://en.wikipedia.org/wiki/Same-origin_policy an, allgemein bedeutet es die gleiche Domäne 'Protokoll: // Domäne: Port' – 11thdimension

Antwort

0

Sie können so überprüfen. Ich habe jquery BTW in meinem Code verwendet.

$(window).blur(function() { 
    if ($('iframe').is(':focus')) { 
    ... 
    } else { 
    ... 
    }     
}); 
+0

Sie können die Ereignisse auch binden und lösen, um doppelte Aufrufe zu vermeiden. – kanchan

+0

Danke dafür, jedoch hatte ich im ursprünglichen Beitrag gesagt, dass dies aus irgendeinem Grund nicht funktioniert: window.onblur = function() {\t // wenn Sie das Fenster verlassen \t if (conn! = Null) { \t \t if ($ ('iframe') ist (. ': Fokus')) {\t \t \t \t \t \t conn.send (JSON.stringify ({ 'Typ': 'upd', 'ele': 'vis' , Status ': 1})); \t \t} else { \t \t \t conn.send (JSON.stringify ({ 'Typ': 'upd', 'ele': 'vis', 'Status': 0})); \t \t} \t} }; –