So finden Sie heraus, was genau das Ereignis ausgelöst?

Ich bin mit einigen Funktion mit jQuery, zum Beispiel:

$(window).one('beforeunload', function() {
//my code
});

Aber ich möchte wirklich, um herauszufinden, alles über Sie, was hat dieses Ereignis ausgelöst hat, und wie.

Habe ich versucht den folgenden code:

$(window).one('beforeunload', function(e) {
alert(JSON.stringify(e));
});

Aber es wirft Ausnahme etwa kreisförmige Struktur. Definitiv aber es muss einen anderen Weg der Differenzierung und debugging durch.

Wie werde ich es anwenden?

Ich möchte sehen, was dieses Ereignis ausgelöst hat, war es eine Verbindung, eine form eingereicht, eine javascript -, eine Seite aktualisiert wird, oder ein hin und her, Tasten oder was auch immer, und es ist alles in Ordnung in diesem Fall. ABER, wenn es ausgelöst wurde durch ein Aufruf zum öffnen einer externen Anwendung, will ich verwerfen der Veranstaltung und die Rückgabe null.

Beispiel für externe Anwendung starten:

<a href="skype:your_skype_name?call" >

Irgendwelche Ideen?

GELÖST

Dies ist, wie ich es gelöst.

Ich nur einige Skript-Hyperlink erste, um mehr Kontrolle über die Veranstaltung:

<a href="javascript:void(0)" id="skype_click_ok"

Dann Erzeuge ich eine Globale variable zum speichern des Status von beforeunload:

var dontunload=0;

Dann habe ich manuell Bearbeiten, den link, aber die Einstellung Position.href, und das ändern der variable state:

$('#skype_click_ok').click(function(){
dontunload=1;
location.href='skype:marilynbrusas?call';
});

Nun meine eigentliche beforeunload Veranstaltung, beachten Sie die one() wurde auch geändert, um bind():

$(window).bind('beforeunload', function() {
  if (dontunload==1) dontunload=0;  //if triggered from our skype - do nothing, yet  cancel state for the next call
  else {  //Do the actual code
          //Fade out, before leaving the page.
      $('html#my_html').stop(true,false).css('overflow','hidden').animate({opacity:0},2000);
      //Lock content with invalid image hack
          $('body#my_body').prepend(
        $('<div>').attr({style:'position:fixed;height:100%;width:100%;left:0;top:0;z-index:900100;background-image:url(in-your-face)'})
      );
          //unbind the event
      $(this).unbind('beforeunload');
  }
});

EDIT3

Eigentlich ist es nicht gelöst. Dieser trick funktioniert nicht im IE und auch noch Auslöser von javascript:void(0) links...

  • Ein Aufruf zum öffnen einer externen Anwendung ? Können Sie bitte besser erklären ?
  • <a href="skype:your_skype_name?call" > - dies löst eine BEKOMMEN, und damit löst vor-unload-Ereignis. Die externe Anwendung bedeutet, es hat ein internes Protokoll, andere als http: zum Beispiel skype:. So versucht es zu starten Sie eine skype-Anwendung anstelle der öffnung einige Seite im web. Und ich will Abbrechen, meine Veranstaltung, wenn es der Fall ist.
InformationsquelleAutor Anonymous | 2012-09-05
Schreibe einen Kommentar