How to write a global error handler in JavaScript?

Global error handlers in JavaScript allow you to catch unhandled exceptions and errors that occur anywhere in your application. This is essential for debugging and providing better user experience.

Using window.onerror

The window.onerror event handler catches JavaScript runtime errors, including syntax errors and uncaught exceptions.

Syntax

window.onerror = function(message, source, lineno, colno, error) {
    // Handle the error
    return true; // Prevents default browser error handling
};

Parameters

Parameter Description
message Error message
source URL of the script where error occurred
lineno Line number where error occurred
colno Column number where error occurred
error Error object with stack trace

Example

<!DOCTYPE html>
<html>
<head>
    <title>Global Error Handler</title>
</head>
<body>
    <h1>Global Error Handler Demo</h1>
    <div id="output"></div>
    
    <script>
        // Set up global error handler
        window.onerror = function(message, source, lineno, colno, error) {
            const errorInfo = `
                Error Message: ${message}
                Source: ${source}
                Line: ${lineno}
                Column: ${colno || 'N/A'}
                Stack: ${error ? error.stack : 'N/A'}
            `;
            
            document.getElementById('output').innerHTML = 
                '<pre style="color: red; background: #f5f5f5; padding: 10px;">' + 
                errorInfo + '</pre>';
            
            return true; // Suppress default browser error dialog
        };
        
        // Trigger an error after 1 second
        setTimeout(function() {
            // This will cause a syntax error
            eval("invalid syntax {");
        }, 1000);
    </script>
</body>
</html>

Using addEventListener for Unhandled Promise Rejections

For modern applications, also handle unhandled promise rejections:

<!DOCTYPE html>
<html>
<head>
    <title>Promise Error Handler</title>
</head>
<body>
    <div id="promise-output"></div>
    
    <script>
        // Handle unhandled promise rejections
        window.addEventListener('unhandledrejection', function(event) {
            document.getElementById('promise-output').innerHTML = 
                '<div style="color: red; padding: 10px; background: #ffe6e6;">' +
                'Unhandled Promise Rejection: ' + event.reason +
                '</div>';
            
            event.preventDefault(); // Prevent console error
        });
        
        // Trigger an unhandled promise rejection
        setTimeout(function() {
            Promise.reject('Something went wrong!');
        }, 1500);
    </script>
</body>
</html>

Complete Error Handling Setup

// Complete global error handling setup
window.onerror = function(message, source, lineno, colno, error) {
    console.error('JavaScript Error:', {
        message: message,
        source: source,
        line: lineno,
        column: colno,
        stack: error ? error.stack : null
    });
    
    // Log to external service or show user-friendly message
    return true;
};

window.addEventListener('unhandledrejection', function(event) {
    console.error('Unhandled Promise Rejection:', event.reason);
    
    // Handle the rejection
    event.preventDefault();
});

Best Practices

Return true from window.onerror to suppress the browser's default error dialog. Use event.preventDefault() for unhandled promise rejections. Always log errors for debugging and consider showing user-friendly error messages instead of technical details.

Conclusion

Global error handlers provide a safety net for catching unhandled errors in JavaScript applications. Use both window.onerror and unhandledrejection events for comprehensive error handling.

Updated on: 2026-03-15T22:13:47+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements