2017-02-16 3 views
1

Ich habe einen Countdown auf meiner Webseite zusammen mit einem IFrame. Countdown wird auf $(window).blur stoppen und auf $(window).focus starten. Wenn ich auf den IFrame klicke, wird das Blur-Ereignis ausgelöst und der Countdown gestoppt. Ich habe dieses Problem gelöst, indem ich der Codezeile folge.IFrame in meiner Webseite auslösendes Unschärfereignis

$(window).blur(function() { 
    if (document.activeElement.nodeName == "IFRAME") { 
    //Continue timer 
    else { 
     //Stop timer 
    } 
}); 

Aber wenn ich außerhalb des Fensters sofort nach dem Klicken auf IFrame klicke, wird das Blur-Ereignis nicht ausgelöst. Da das Blur-Ereignis nach einem Blur-Ereignis erst ausgelöst wird, wenn das Fokus-Ereignis ausgelöst wurde.

Ich habe genannt ähnliche Themen - $(window).blur event affecting Iframe und How can I capture the blur and focus of the entire browser window?

andere Ideen?

Update - Ich habe einen anderen Ansatz, der mir einen weiteren Schritt voraus. Der folgende Code ist neuer Ansatz

$(window).on('focus', function() { 
          //Coundown runs 
        }).on('blur', function() { 
          //Coundown stops 
        });; 

$(document).ready(function() { 
       var iframe = document.getElementById("iframeID"); 
          $(iframe.contentWindow).on('focus', function(){ 
            //Coundown runs 
          }).on('blur', function() { 
            //Coundown stops 
          }); 
        }); 

Dieser Code wird Countdown läuft auf iframe Fokus machen und auf iframe Unschärfe stoppen.

Aber, das Problem, das ich in diesem Ansatz konfrontiert ist Countdown funktioniert gut, wenn "scr" nicht in Iframe geladen. Wenn das "scr" in Iframe geladen ist, werden das Fokus- und Blur-Ereignis für Iframe nicht bind und der Countdown stoppt beim Iframe-Klick.

Irgendeine Idee zu diesem Thema?

Antwort

3

Ich denke, das Problem ist, dass, sobald Inhalte in Ihr iframe geladen werden, es von Ihrem Browser (aus Sicherheitsgründen) vom Fenster isoliert wird.

Sie können Window.postMessage() verwenden, um Ereignisse zwischen dem Hauptfenster und dem iframe zu kommunizieren.

Werfen Sie einen Blick auf Window postmessage

+0

@ user3656699- Vielen Dank für Ihre Idee. Ich bin durch den Link und das Post-Nachricht-Thema gegangen. Kann Post-Nachricht nur verwendet werden, wenn sowohl der Eltern- als auch der Iframe-Inhalt von mir stammen sollte? (Referenz [Link] (http://stackoverflow.com/questions/25098021/securityerror-blocked-a-frame-with-origin-from-accessing-a-cross-origin-frame)) seit dem Problem - ** Blockiert einen Rahmen mit Kreuzursprung **. –

+0

Vielen Dank für Ihre Nachricht nach der Nachricht. Es hat für mich funktioniert. aber ich musste die Cross-Origin-Richtlinie in meinem Browser deaktivieren. Da die beiden Seiten nicht von mir und anderen Ursprungs sind. –

+0

@AswinMR Ja, wenn der Inhalt des Iframes nicht im Besitz von Ihnen ist, können Sie nicht sehen, was dort vor sich geht, und die Postnachricht würde einen Implementierungsteil innerhalb des Iframes erfordern. (Denken Sie z. B. an ein Szenario, in dem ein iframe zufällige Seiten lädt und die Umhüllungsseite den Benutzernamen und die Kennwortinformationen, die vom Browser automatisch ausgefüllt werden, in die grep-Datei umwandelt) –

Verwandte Themen