При создании пользовательского HTML-элемента со встроенной пользователем строкой JSON (хотя тип строки здесь не имеет значения) ...
<my-elem>
{ "some":"content" }
</my-elem>
Я бы хотел JSON.parse
вот так...
class MyElement extends HTMLElement {
constructor() {
super();
this.root = this.attachShadow({ mode:'open' });
this.root.appendChild(template.content.cloneNode(true));
}
connectedCallback() {
JSON.parse(this.innerHTML);
}
}
customElements.define('my-elem', MyElement);
const template = document.createElement('template');
template.innerHTML = `irrelevant`;
... и получить идеальный результат с Firefox v.63.
Но при работе с Chrome v.71 я получаю
Uncaught SyntaxError: Unexpected end of JSON input
из-за this.innerHTML
, возвращающего пустую строку.
Я также пытался использовать другие методы DOM для доступа к текстовому контенту, но все они тоже не сработали.
Теперь я довольно невежественен, какчтобы заставить это работать с Chrome.
Кстати: использование <slot>
не поможет, так как я не хочу отображать текстовый контент ... только доступ к нему для анализа.
Решено :
- Поместите определение шаблона перед определением класса.
- Убедитесь, что скрипт, определяющий пользовательский элемент, вставлен за всеми экземплярами пользовательских элементов в документе HTML,