This repository contains a Javascript polyfill for the HTML Imports specification.
HTML Imports are a way to include and reuse HTML documents in other HTML documents. As <script>
tags let authors include external Javascript in their pages, imports let authors load full HTML resources. In particular, imports let authors include Custom Element definitions from external URLs.
For HTML imports use the import
relation on a standard <link>
tag, for example:
<link rel="import" href="import-file.html">
Include the html-imports.js
or html-imports.min.js
(minified) file in your project.
<script src="HTMLImports/html-imports.js"></script>
html-imports.js
is the debug loader and uses document.write
to load additional modules.
Use the minified version (html-imports.min.js
) if you need to load the file dynamically.
In imported documents, href
and src
attributes in HTML, and url
properties in CSS files, are relative to the location of the imported document, not the main document.
The HTML Imports polyfill begins processing link tags when the DOMContentLoaded
event fires. To know when loading is complete, listen for the HTMLImportsLoaded
event on document
or window
.
Example:
<script>
window.addEventListener('HTMLImportsLoaded', function(e) {
// all imports loaded
});
</script>
The polyfill loads linked stylesheets, external scripts, and nested HTML imports, but does not parse any data in the loaded resources. For parsing imports, combine HTML Imports with Custom Elements. As long as the HTML Imports is loaded first, the Custom Elements polyfill will detect it, and process all imports when HTMLImportsLoaded
event fires.
Under native imports, <script>
tags in the main document block the loading of imports. This is to ensure the imports have loaded and any registered elements in them have been upgraded. This native behavior is difficult to polyfill so the HTML Imports polyfill doesn't try. Instead the WebComponentsReady
event is a stand in for this behavior:
<script>
window.addEventListener('WebComponentsReady', function(e) {
// imports are loaded and elements have been registered
});
</script>
- In a native HTML Imports,
document.currentScript.ownerDocument
references the import document itself. In the polyfill usedocument._currentScript.ownerDocument
(note the underscore).
For running tests or building minified files, consult the tooling information.