Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firefox doesn't show custom error messages

I'm trying to create an extendable error class in CoffeeScript with this code:

class @ExtendableError extends Error
  constructor: (message = '') ->
    super message

    Object.defineProperty @, 'message',
      configurable: true
      enumerable : false
      value : message
      writable : true

    Object.defineProperty @, 'name',
      configurable: true
      enumerable : false
      value : @.constructor.name
      writable : true

    Object.defineProperty @, 'stack',
      configurable: true
      enumerable : false
      value : (new Error(message)).stack
      writable : true

When I try to throw one of these errors in Firefox using this code:

throw new ExtendableError('An error message');

I only get [object Object] printed to the console.

When I throw a built in error:

throw new Error('An error message');

I get the desired error message printed to the console: Error: An error message.

It should be noted that both, Error.toString() and ExtendableError.toString() work correctly. So I have absolutely no clue what's going on.

I tested the same code in Chrome without problems and I've literally searched for ours in Google without luck.

Any ideas?

Update 1:

Someone asked me to include the generated JavaScript code. So here it is:

// Generated by CoffeeScript 1.10.0
(function() {
  var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
    hasProp = {}.hasOwnProperty;

  this.ExtendableError = (function(superClass) {
    extend(ExtendableError, superClass);

    function ExtendableError(message) {
      if (message == null) {
        message = '';
      }
      ExtendableError.__super__.constructor.call(this, message);
      Object.defineProperty(this, 'message', {
        configurable: true,
        enumerable: false,
        value: message,
        writable: true
      });
      Object.defineProperty(this, 'name', {
        configurable: true,
        enumerable: false,
        value: this.constructor.name,
        writable: true
      });
      Object.defineProperty(this, 'stack', {
        configurable: true,
        enumerable: false,
        value: (new Error(message)).stack,
        writable: true
      });
    }

    return ExtendableError;

  })(Error);

}).call(this);
like image 523
Cristóbal Ganter Avatar asked Dec 18 '25 05:12

Cristóbal Ganter


1 Answers

I put your file in lib/Error.coffee. Then I converted to Javascript:

 coffee --compile --output dist lib

It created the file dist/Error.js.

Then I ran your code with this simple page:

 <!DOCTYPE html>
 <html>
 <body>
   <script src="dist/Error.js"></script>
   <script>
     throw new ExtendableError('example error');
   </script>
 </body>
 </html>

I did some test with Firefox 46.0.1 in Linux and I didn't find any problem, look my screenshoots:

Firefox with Inspect Element

Firefox inspect Element

Firefox with Firebug

Firefox with Firebug

Chrome

It very similar in Chrome. Chrome Example

I guess the problem is in another part of your code, maybe you're catching the exception and you're doing something with it.

If the problem persist in your Firefox installation and your think it is related with the version of the browser, you can use BrowserStack to test your code with many different versions of the browser and many different Operative System.

like image 182
Troncador Avatar answered Dec 21 '25 16:12

Troncador



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!