var port; var timeout; onerror = function(a,b,c,d,e) { // will return undefined, thus the error is "not handled" // so error should be reported to the user, but this test doesn't check // that. // just make sure that this method is invoked with five arguments clearTimeout(timeout); var log = ''; if (arguments.length != 5) log += 'got ' + arguments.length + ' arguments, expected 5. '; if (typeof a != 'string') log += 'first argument wasn\'t a string. '; if (b != location.href) log += 'second argument was ' + b + ', expected ' + location.href + '. '; if (typeof c != 'number') log += 'third argument wasn\'t a number. '; if (typeof d != 'number') log += 'fourth argument wasn\'t a number. '; if (e != 42) log += 'fifth argument wasn\'t the thrown exception. '; port.postMessage(log); } onconnect = function (e) { port = e.ports[0]; timeout = setTimeout(function() { port.postMessage('self.onerror was not invoked'); }, 250); throw 42; // will "report the error" }