<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://knowledgebase.pirho.net/index.php?action=history&amp;feed=atom&amp;title=JScript_and_Other_Interesting_Quirks_of_Internet_Explorer</id>
	<title>JScript and Other Interesting Quirks of Internet Explorer - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://knowledgebase.pirho.net/index.php?action=history&amp;feed=atom&amp;title=JScript_and_Other_Interesting_Quirks_of_Internet_Explorer"/>
	<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=JScript_and_Other_Interesting_Quirks_of_Internet_Explorer&amp;action=history"/>
	<updated>2026-07-11T14:11:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=JScript_and_Other_Interesting_Quirks_of_Internet_Explorer&amp;diff=283&amp;oldid=prev</id>
		<title>Dex: Created page with &quot; 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 i...&quot;</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=JScript_and_Other_Interesting_Quirks_of_Internet_Explorer&amp;diff=283&amp;oldid=prev"/>
		<updated>2026-03-13T20:12:58Z</updated>

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