JavaScript Worker messageerror Event

Beginner
⏱️ 10 min read
📚 Updated: Jul 2026
🎯 5 Examples
🚀 5 Try-it labs
Limited availability
Instance event

What You’ll Learn

The messageerror event of the Worker interface fires when it receives a message that cannot be deserialized. Learn onmessageerror vs addEventListener("messageerror"), how it differs from message and error, and how to feature-detect—with five examples and try-it labs.

01

Kind

Instance event

02

Name

messageerror

03

Type

MessageEvent

04

Handler

onmessageerror

05

When

Deserialize fail

06

Status

Limited availability

Introduction

Most worker replies arrive through the message event with a usable event.data value. Rarely, a message reaches the main thread but cannot be deserialized. Then the Worker object fires messageerror instead of a normal message.

Think of three channels: message (success), messageerror (bad decode), and error (worker script failed). Production code that depends on workers should plan for all three when support allows.

💡
Beginner tip

Everyday data (strings, numbers, plain objects, arrays) almost always deserializes fine. Labs teach you to attach and feature-detect messageerror—forcing a real deserialize failure is uncommon in beginner demos.

Understanding the Worker messageerror Event

An instance event on Worker that fires when a received message cannot be deserialized.

  • Event name"messageerror".
  • Handler propertyworker.onmessageerror.
  • Listenerworker.addEventListener("messageerror", handler).
  • Event type — a MessageEvent (inherits from Event).
  • Not cancellable and does not bubble (per MDN).
  • Limited availability on MDN (not Baseline); available in Web Workers except Service Workers.

📝 Syntax

Use the event name in methods like addEventListener(), or set an event handler property.

JavaScript
addEventListener("messageerror", (event) => { })

onmessageerror = (event) => { }

Event type

A MessageEvent. Same family as the successful message event.

Event properties (MessageEvent)

PropertyMeaning
dataData from the emitter (may be unusable after a deserialize failure)
originOrigin of the message emitter
lastEventIdUnique ID string for the event
sourceEmitter (WindowProxy, MessagePort, or ServiceWorker)
portsRelated MessagePort objects when applicable

Typical pattern (MDN idea)

JavaScript
const worker = new Worker("worker.js");

worker.addEventListener("message", (event) => {
  console.log(`Received message from worker: ${event.data}`);
});

worker.addEventListener("messageerror", (event) => {
  console.error("Error receiving message from worker:", event);
});

⚡ Quick Reference

GoalCode / note
Handler propertyworker.onmessageerror = (e) => { … }
addEventListenerworker.addEventListener("messageerror", handler)
Feature-detect"onmessageerror" in Worker.prototype
Bubbles / cancelableNo / No
MDN statusLimited availability (not Baseline)

🔍 At a Glance

Four facts to remember about the Worker messageerror event.

Fires
bad decode

Cannot deserialize

Listen
onmessageerror

Or addEventListener

≠ error
different

Not a script crash

Baseline
no

Limited availability

Examples Gallery

Examples follow MDN Worker: messageerror event. Labs use blob workers and focus on listeners, feature detection, and contrasts—plain cloneable replies still use message.

📚 Getting Started

Attach handlers the two standard ways (MDN patterns).

Example 1 — addEventListener("messageerror") (MDN Idea)

Listen for both message and messageerror.

JavaScript
worker.addEventListener("message", (event) => {
  console.log(`Received: ${event.data}`);
});

worker.addEventListener("messageerror", (event) => {
  console.error("Error receiving message from worker:", event);
});
Try It Yourself

How It Works

A healthy cloneable reply still arrives on message. The messageerror listener sits ready for deserialize failures.

Example 2 — onmessageerror Handler Property

Same event using the handler property (also shown on MDN).

JavaScript
worker.onmessage = (event) => {
  console.log(`Received: ${event.data}`);
};

worker.onmessageerror = (event) => {
  console.error("Error receiving message from worker:", event);
};
Try It Yourself

How It Works

Prefer addEventListener when several modules must listen; the property is fine for a single owner.

📈 Detection & Contrasts

Pair channels, feature-detect, and keep error separate.

Example 3 — Always Pair with message

Successful replies and decode failures are different events—wire both.

JavaScript
worker.onmessage = (e) => updateUI(e.data);
worker.onmessageerror = () => showDecodeError();
Try It Yourself

How It Works

Without messageerror, a rare decode failure can look like a silent hang if you only wait for message.

Example 4 — Feature-Detect First

Because support is Limited availability, check before relying on the handler.

JavaScript
const supported = "onmessageerror" in Worker.prototype;

if (supported) {
  worker.onmessageerror = (event) => {
    console.error("messageerror", event);
  };
}
Try It Yourself

How It Works

Still always attach message and error—those cover the everyday success and script-failure paths.

Example 5 — Three Channels: message / messageerror / error

Map each event to a clear UI path.

JavaScript
worker.onmessage = (e) => log("ok", e.data);
worker.onmessageerror = () => log("decode-fail");
worker.onerror = (e) => {
  log("script-fail", e.message || "error");
  e.preventDefault();
};
Try It Yourself

How It Works

The lab exercises message and error. messageerror stays attached for decode failures when the browser supports it.

🚀 Common Use Cases

  • Fail fast when a worker reply cannot be decoded.
  • Log deserialize issues to monitoring instead of waiting forever.
  • Show a clear “bad reply” UI separate from script crashes.
  • Harden protocols that transfer exotic objects or ports.
  • Feature-detect support in progressive-enhancement worker wrappers.

🔧 How It Works

1

Worker sends

The worker posts a message toward the main thread.

Send
2

Deserialize

The engine tries to rebuild the structured-clone payload.

Decode
3

messageerror fires

If decoding fails, Worker fires messageerror (not message).

Event
4

Your handler runs

Log, notify the UI, and stop waiting for a normal reply.

📝 Notes

  • MDN: Limited availability (not Baseline)—no Deprecated / Experimental / Non-standard banner.
  • Available in Web Workers except Service Workers.
  • Event type is MessageEvent; not cancellable and does not bubble.
  • Do not confuse with error (script failure) or a successful message.
  • Related learning: message, error, postMessage(), Worker().

Limited Browser Support

The Worker messageerror event is marked Limited availability on MDN (not Baseline). Logos use the shared browser-image-sprite.png sprite from this project. It is available in Web Workers except Service Workers. Always feature-detect.

Limited availability · Not Baseline

Worker messageerror event

Fires when a received message cannot be deserialized. Listen with onmessageerror or addEventListener("messageerror").

Limited Not Baseline
Google Chrome Check current engine support · feature-detect
Varies
Mozilla Firefox Supported in modern versions (feature-detect)
Modern
Apple Safari Supported from Safari 16.4+ (feature-detect)
Modern
Microsoft Edge Check current Chromium support · feature-detect
Varies
Opera Follow Chromium status · feature-detect
Varies
Internet Explorer No practical messageerror support
Unavailable
Worker messageerror Feature-detect

Bottom line: Attach messageerror when supported, and always keep message + error handlers for everyday success and script failures.

Conclusion

The Worker messageerror event covers the rare case where a reply cannot be deserialized. Pair it with message for success and error for script failures, and feature-detect because support is Limited availability.

Continue with error, message, postMessage(), or the JavaScript hub.

💡 Best Practices

✅ Do

  • Feature-detect onmessageerror when you rely on it
  • Listen for message, messageerror, and error
  • Show distinct UI for decode vs script failures
  • Prefer plain cloneable payloads for beginner protocols
  • Log deserialize failures to monitoring

❌ Don’t

  • Confuse messageerror with worker error
  • Assume every browser exposes the handler
  • Treat Limited availability like Baseline Widely
  • Overwrite handlers accidentally in shared helpers
  • Wait forever for message with no timeout or fallback

Key Takeaways

Knowledge Unlocked

Five things to remember about Worker messageerror

Main-thread signal that a reply could not be deserialized.

5
Core concepts
📌02

onmessageerror

or listener

Listen
💬03

≠ message

decode failed

Compare
🛑04

≠ error

not script crash

Compare
🎯05

Limited

not Baseline

Status

❓ Frequently Asked Questions

It fires on the Worker object when the main thread receives a message that cannot be deserialized. Listen with worker.onmessageerror or worker.addEventListener("messageerror", handler).
No. MDN does not mark the Worker messageerror event as Deprecated, Experimental, or Non-standard. It has Limited availability (not Baseline) on MDN, so feature-detect. It is available in Web Workers except Service Workers.
message means a reply arrived and decoded successfully (read event.data). messageerror means a message arrived but could not be deserialized—so you do not get a usable payload the normal way.
error means the worker script failed (throw, load failure, and similar). messageerror is specifically about failing to deserialize an incoming message, not about the worker script crashing.
No. Per MDN, this event is not cancellable and does not bubble.
Everyday cloneable values (strings, numbers, plain objects, arrays) deserialize fine. messageerror is for rarer deserialize failures. Labs focus on attaching handlers, feature detection, and contrasting related events.
Did you know?

Related events on MDN list message beside messageerror. Successful decode uses message; failed decode uses messageerror—both are MessageEvents, but only success gives you a normal usable event.data path.

Next: error event

Learn when a dedicated worker fails and how to recover.

error event →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful