JavaScript ShadowRoot.innerHTML — розмітка тіньового дерева


Властивість innerHTML задає розмітку всередині тіні — разом зі стилями.

автор: NagarD

Загальний опис

Найшвидший спосіб наповнити компонент: пишеш і <style>, і розмітку одним рядком. Стиль усередині діє лише тут — назовні він не витече, а зовнішні класи не проникнуть усередину.

Але це той самий innerHTML, з тими самими ризиками: дані від користувача сюди класти не можна. Тінь ізолює стилі, а не безпеку — скрипт із чужого рядка виконається так само.

Для складніших компонентів беруть <template> і клонують його вміст — це швидше й не змушує браузер щоразу розбирати рядок.

автор: NagarD

Нотатка

Ізоляція стилів — не ізоляція безпеки. XSS через shadowRoot.innerHTML працює так само, як і через звичайний.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
innerHTML 53+ 63+ 10+ 40+ 79+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
innerHTML 53+ yes yes 10+

Приклади

+ запропонувати свій приклад у пісочниці

Компонент зі своїми стилями, що не б'ються зі сторінкою.

class MyCard extends HTMLElement {
    connectedCallback() {
        const shadow = this.attachShadow({ mode: 'open' });

        shadow.innerHTML = `
            <style>
                /* діє ЛИШЕ тут */
                .title { color: #0172ad; font-weight: bold; }
            </style>
            <p class="title"></p>
        `;

        // текст користувача — через textContent, не innerHTML
        shadow.querySelector('.title').textContent = this.getAttribute('title');
    }
}

customElements.define('my-card', MyCard);
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід