html imports ~共通部分を外部から非同期で読み込み~
<script>(async () => document.querySelector('#foo').append(document.createRange().createContextualFragment(await (await fetch('bar.html')).text())))();</script>
ローカルで動作確認する場合は、fetchを使用しているので、
ローカルにWebサーバーを起動しないと動作確認出来ません。
Local Web Server
https://qiita.com/okhrn/items/4d3c74563154f191ba16
https://qiita.com/sudahiroshi/items/e74d61d939f18779970d
https://qiita.com/yoshi389111/items/76b37c7f54b00f686149
Synchronous XMLHttpRequest
以下だと同期で読み込み出来るのかしら...?
<script> const htmlImports = (selector, htmlfile, position = 'append') => { const request = new XMLHttpRequest(); request.open('GET', htmlfile, false); request.send(null); if (request.status === 200) { if (position === 'after') document.querySelector(selector).after(document.createRange().createContextualFragment(request.responseText)); if (position === 'append') document.querySelector(selector).append(document.createRange().createContextualFragment(request.responseText)); if (position === 'before') document.querySelector(selector).before(document.createRange().createContextualFragment(request.responseText)); if (position === 'prepend') document.querySelector(selector).prepend(document.createRange().createContextualFragment(request.responseText)); console.log(`imported ${htmlfile}`); } }; // export default htmlImports; </script> <script> // type="module" // import htmlImports from './import.js'; htmlImports('#foo', 'bar.html'); </script>
Range
https://zenn.dev/antez/books/6da596a697aa86/viewer/4a39b4https://uhyohyo.net/javascript/8_1.html
[Appendix]
ES Modules
https://qiita.com/ozaki25/items/9723cb3c1c72845157d5https://kamatimaru.hatenablog.com/entry/2021/01/27/004235