Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

ES5 and DOM4 shim for all browsers with IE6 and IE7 support

based on:

Status: Stable Beta

  • Simple Demo Try it in IE7 (or in IE6 ¬_¬)! And take a look at the source
  • Complex Demo Not working in IE6 due lack of CSS


  • Normalizing the JS and DOM across all browsers
  • Less code (eg less closures, reusable functions) & file size
  • IE6+ support
  • Include all we need from ES5, ES6 and DOM shim in one file
  • Powerful customisation


  • Add methods such [add/remove]EventListener, querySelector[All], setSelectionRange, etc in IE6+
  • Add Element/Node properties such classList, children, [first/last]ElementChild, reversed, control, labels, etc in IE6+
  • Add methods such insertAdjacentHTML (old FF), stopImmediatePropagation (Opera < 12) and properties reversed, control, labels, etc in W3C browsers
  • Add ES5/6 methods in all browsers
  • Add DOM4 methods append, prepend, after, before, replace, remove, match in all browsers
  • Provide bugs fixing for DOM and ES in IE, Opera, Chrome, FF
  • and more


  • For W3C browsers: ~8KiB gziped
  • For IE8: ~16KiB gziped
  • For IE6/7: ~18KiB gziped

Caution !!!

  • This lib is not about performance in IE < 9
  • The requests should respond with the mime type "text/x-component"
  • That's all cautions


  • For modern browsers: Add main script in head section

         <script src="a.js"></script>
  • For IE8 support:

  1. First[!] add a.ie8.js in head section

       <!--[if IE 8]>
       <script src="a.ie8.js"></script>
  2. Add a.js in head section

       <script src="a.js"></script>
  • For IE6 and IE7, and IE8 support:
  1. Add a.ie8.js and a.ielt8.js, a.js in head section

       <!--[if lt IE 8]>
       <script src="a.ielt8.js"></script>
       <!--[if IE 8]>
       <script src="a.ie8.js"></script>
       <script src="a.js"></script>
  2. Put to the root of your site



IF __GCC__INCLUDE_EXTRAS__ == false -> Broken Object.defineProperty and Object.defineProperties will be deleted

IF __GCC__INCLUDE_EXTRAS__ == true ->

  • Exporting these objects to global (window)
    1. browser
    2. DOMStringCollection
    3. XHR from with customisations
  • Extending objects
    1. Object.append(object, donor, [donor2, ...])
    2. Object.extend(object, donor, [donor2, ...]) (Object.append with overwrite exists properties)
    3. Object.inherits(Child, Parent)
    4. Array.prototype.unique()
    5. String.random(length)

Note: if you don't need Extras set GCC flag __GCC__INCLUDE_EXTRAS__ to false in a.js and recompile a.js using Google Closure Compiler (GCC online)


In addition to __GCC__INCLUDE_EXTRAS__ GCC flag there are a bunch of over flags to enable/disable ES5/6 and DOM3/4 shims in a.js file. After set flags you need to recompile a.js using Google Closure Compiler (GCC online)


If GCC flag __GCC__IS_DEBUG__ == true -> Console fix from

IE < 8 Same-domain limitation

IE requires that the .htc behavior file must be in the same domain as the HTML page which uses it. If you try to load the behavior from a different domain, you will get an "Access Denied" error. Note that the domain must be exactly the same; that means that is a different domain than

IE < 8 Solve Same-domain limitation

Russian instruction in extra/SameDomainLimitation.SOLVE_RUS.odt

Temporary testing

Known issues:

  1. Lack of test cases
  2. Same-domain limitation (can be solve only on server) for IE < 8
  3. Incompatibility with [working on it]


  1. Tests
  2. ( &




Lightweight ES5 and DOM shim with IE6 and IE7 support






No releases published


No packages published