Using onbeforeunload without dialog?

前端 未结 5 644
死守一世寂寞
死守一世寂寞 2020-12-09 16:04

I\'m trying to post data when a user leaves my page. I have finally managed to find a working solution, however, it shows a confirmation dialog when the user leaves. I have

相关标签:
5条回答
  • 2020-12-09 16:31

    From the Mozilla Developer Network page:

    When this event returns a non-void value, the user is prompted to confirm the page unload.

    This means the return value of the handler must be undefined (not '', false, or null) in order to avoid triggering the confirmation prompt.

    window.onbeforeunload = function() {
    
      $.post("track.php", {
      ...
      });
    
      return undefined;
    }
    

    In javascript you can skip the return value altogether to get the same result.

    In coffeescript with jquery it's something like

    $(document).ready ->
      $(window).bind('beforeunload', ->
        #put your cleanup code here
        undefined
      )
    
    0 讨论(0)
  • 2020-12-09 16:44

    I have found a really simple trick to get this working with using

    $(window).bind('onbeforeunload', function () {
    
    $.post("track.php", {
    async: false,
    refid: refid,
    country: country, 
    type: type,
    });
    
    });
    
    0 讨论(0)
  • 2020-12-09 16:45

    Could you test this:

    $(window).on('beforeunload', function (e) {
        if (e.originalEvent) $.post("track.php", {
            async: false,
            refid: refid,
            country: country,
            type: type,
        });
        else $.get("", {
            async: false
        });
        $(this).trigger('beforeunload');
    }
    

    This will create many useless requests but should let your first request enough time to reach server.

    0 讨论(0)
  • 2020-12-09 16:48

    If you want to disable the dialog, please only write

    window.onbeforeunload = function() { ... return; }

    instead of

    window.onbeforeunload = function() { ... return ''; }.

    I hope it will help you.

    0 讨论(0)
  • 2020-12-09 16:50

    Removing return statement worked for me also.

    0 讨论(0)
提交回复
热议问题