JScript and Other Interesting Quirks of Internet Explorer
Internet Explorer is often remembered for its incompatibilities and proprietary behaviour. However, many of its quirks — particularly around JScript and the browser runtime — were early experiments that anticipated features later standardised across the web. Understanding these decisions provides valuable insight into how modern JavaScript engines, APIs, and developer tools evolved.
Context
During the late 1990s and early 2000s, the web was still defining itself. There was no ECMAScript consensus in practice, CSS was incomplete, and browsers acted as both runtime and application platform.
Internet Explorer was developed in this environment:
- Rapid iteration
- No stable standards enforcement
- Strong pressure to enable rich applications inside the browser
- Tight coupling to the Windows platform
Many “quirks” were not accidents — they were pragmatic design decisions made before the web had agreed on how things *should* work.
JScript: A Parallel Evolution
JScript was Microsoft’s implementation of ECMAScript, created to avoid trademark issues with JavaScript. While broadly compatible, it diverged in subtle but important ways.
Early Language Extensions
JScript introduced or popularised:
- Conditional compilation
- `try...catch` support earlier than some competitors
- COM object instantiation via `ActiveXObject`
- Tight integration with host objects (WScript, VBScript, Shell)
These features blurred the line between “scripting language” and “application glue”.
In hindsight, this resembles:
- Node.js host bindings
- Browser APIs exposed as global objects
- JavaScript used as orchestration rather than pure computation
The DOM Before the DOM
Before DOM standards stabilised, Internet Explorer implemented its own object model.
Notable behaviours:
- `document.all`
- Non-standard event models (`window.event`)
- Direct element properties (`element.innerText`)
- Implicit global IDs mapping to elements
While problematic for portability, these ideas anticipated:
- Fast element lookup
- Declarative data binding
- Rich interaction models without full page reloads
Modern frameworks effectively recreated these ideas — but with standards backing them.
The Event Model: Wrong, But Early
Internet Explorer’s event model is often criticised, yet it attempted to solve real problems:
- Event bubbling control
- Performance on slow hardware
- Simpler mental models for developers
Features included:
- Centralised event object
- Implicit access via `window.event`
- Early focus on keyboard and accessibility events
Today’s event systems:
- Normalise event objects
- Abstract bubbling and capturing
- Provide synthetic events
The destination looks familiar — only the route was different.
XML, XSLT, and Data Islands
One of Internet Explorer’s most overlooked innovations was its deep XML support.
Capabilities included:
- Native XML DOM
- XSLT processing in-browser
- XPath queries
- Data islands embedded directly in HTML
This enabled:
- Client-side transformations
- Separation of data and presentation
- Early declarative UI concepts
These ideas reappear later as:
- JSON + templates
- Virtual DOMs
- Reactive UI frameworks
- Client-side rendering pipelines
IE simply arrived there too early.
ActiveX: Power at a Cost
ActiveX is remembered primarily as a security risk, but conceptually it was:
- A component model
- A capability extension system
- A bridge between browser and OS
What ActiveX attempted:
- Hardware access
- Native code execution
- Enterprise integration
- Rich client capabilities
Modern equivalents exist:
- Browser permissions
- WebUSB / WebSerial
- Electron
- Progressive Web Apps
The difference is governance, sandboxing, and user consent — not ambition.
Quirks Mode: Accidental Graceful Degradation
Quirks Mode is often mocked, but it solved a real problem: “How do we avoid breaking the entire web overnight?”
By detecting legacy markup, IE:
- Preserved backwards compatibility
- Allowed standards mode to evolve
- Enabled gradual migration
This is an early form of:
- Progressive enhancement
- Graceful degradation
- Feature detection over version detection
A lesson still relevant today.
Why These Decisions Matter
Internet Explorer’s quirks highlight an important truth: The web evolved through experimentation, not purity.
Many ideas that failed initially:
- Returned with better constraints
- Required hardware and bandwidth to catch up
- Needed standards bodies to mature
IE was not always *wrong* — it was often *early*.
Lessons for Modern Developers
Key takeaways:
- Context matters when judging technical decisions
- “Non-standard” does not mean “bad idea”
- Backwards compatibility is a feature, not a flaw
- The browser has always been an application runtime
Understanding these quirks helps explain why modern web platforms look the way they do.
Related Topics
- Progressive Enhancement and Graceful Degradation
- Accessibility, ARIA, and Semantic HTML
- The Evolution of Client-Side Rendering
- Browser Compatibility and Standards Bodies
References
- ECMAScript history and specifications
- Microsoft Internet Explorer developer documentation
- W3C DOM and HTML specifications
- Early web application architecture case studies