Web Components: <script> in <template> のテスト

1. このページの目的

<template> タグ内で <script> タグを使ってみる。

2. デモ

コード

HTML

<demo-tag id="demoTag"></demo-tag>

<template id="demo-tag-template">
  <style>
  h2 {
    color: blue;
  }
  p {
    color: green;
  }
  button {
    cursor: pointer;
  }
  </style>
  <script>
    document.querySelector('demo-tag#demoTag')
      .shadowRoot.querySelector('#btn1')
      .addEventListener('click', function() {
        alert('clicked!');
        console.log('clicked!');
      }
    );
  </script>
  <h2>タイトル in カスタムタグ</h2>
  <p>こんにちは!</p>
  <button id="btn1">Click me!</button>
</template>

JavaScript

customElements.define('demo-tag',
  class extends HTMLElement {
    constructor() {
      super();
      const template = document
        .getElementById('demo-tag-template')
        .content;
      const shadowRoot = this.attachShadow({mode: 'open'})
        .appendChild(template.cloneNode(true));
  }
})

実行結果

3. 結論

4. 参考