class HTMLImportElement extends HTMLTemplateElement { get src(){ return new URL(this.getAttribute("src"), this.baseURI).toString(); } connectedCallback(){ this.load() } async load(){ let res = await fetch(this.src); if(!res.ok){ console.error(`Server responded with code ${res.status} ${res.statusText}`) return } let htmlStr = await res.text() let html = new DOMParser().parseFromString(htmlStr, "text/html"); this.content.replaceChildren(...Array.from(html.querySelector("body").childNodes)) } } customElements.define("camp-html", HTMLImportElement, {extends: "template"})