jQuery exception handling

后端 未结 3 898
感动是毒
感动是毒 2021-01-20 00:28

Is there any way I could catch any uncaught exception in javascript? I mean, all my \"dangerous\" code are in try-catch blocks. But what about exceptions that I don\'t handl

相关标签:
3条回答
  • 2021-01-20 01:19

    You could write a function that would wrap your real handlers in a try/catch

    function tc(func, msg) {
      msg = msg || "Handler exception";
      return function(e) {
        try {
          return func(e);
        }
        catch (exc) {
          $.post( /* send exception to server? */ );
          throw exc; // let nature take its course
        }
      };
    }
    

    (Might want to get fancier with argument handling etc.) Then when you bind handlers you'd do:

    $('#whatever').click(tc(function(e) {
      // your handler function
    }, "This is the message sent to the server when this handler fails"));
    

    Also, if you want to make sure "this" in the handler behaves as before, you can do func.apply($(this), e) instead of just func(e).

    0 讨论(0)
  • 2021-01-20 01:25

    You can use the window.onerror event handler, it's not supported in Opera though and it may not fire in certain situations (thanks @Josh).

    It's not really wise to do this, however, it will make bug finding a nightmare for a start. It's generally best to make sure your code is error free in the first place :-) You certainly shouldn't need to use try... catch statements very often in JavaScript and you definitely shouldn't be using empty catch blocks.

    I can use try-catch blocks here, but they will caught exceptions that occured during the event binding procedure, not during the event handling.

    You can also add try/catch blocks to inner scopes:

    // Outer
    try { 
        $(document).ready(function(){})
    }
    catch (e) {
        /* Error handling */
    }
    
    // Inner
    $(document).ready(function(){
        try { /* ... */ } catch (e) { /* Error handling */ }
    });
    
    0 讨论(0)
  • 2021-01-20 01:26

    How about

        function func_madness() {
            throw("This function is throwing exceptions, because \n" +
            "it can not throw polar bears and whales.\n");
        } // func_madness
    
        window.onload = function () {
            try {
                func_madness();
            } catch (err) {
                document.write("Caught it!\n<br/>\n" + err);
            } // catch
        } // window.onload
    
    0 讨论(0)
提交回复
热议问题