JSFiddle - React, Tailwind, and code Playground

by kentaromiura

JavaScript

window.onerror = function(a, file, c){
    var callstack = [],
        who = arguments.callee.caller;
    while(who){
        
       if(who._traced)break;
       who._traced=true;
       var name = ''+who, args = who.arguments;
       var serializedArguments = [];
        for(var i=0,max=args.length;i<max;i++){
            try{
               serializedArguments.push(JSON.encode(args[i]));
            }catch(ex){
               serializedArguments.push(''+args[i]);
            }
        }
        callstack.push((name.substring(name.indexOf('function') +8,name.indexOf('(')) || who.$name || 'anonymous') + '(' + serializedArguments.join(',') + ')');
        who = who.caller;
    }
    if(who){
      var name = ''+who, fname = (name.substring(name.indexOf('function') +8,name.indexOf('(')) || who.$name || 'anonymous');
       callstack.push(' - not available - recursive call ('+fname+')');                
    }
    
    alert(a+ ' in ' + file + 'row: ' + c +'\nStack:'+ callstack.join('\n'));
}
    var flag = false;
    function b(){
     if(flag) throw 'Error';
     flag = true;
     a();        
    }
    function a(){
        b()
    }
a();