stf*_*stf 5 html javascript shadow-dom
当使用用户嵌入的 JSON 字符串创建 HTML 自定义元素时(尽管字符串的类型与此处不相关)...
<my-elem>
{ "some":"content" }
</my-elem>
Run Code Online (Sandbox Code Playgroud)
我想要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`;
Run Code Online (Sandbox Code Playgroud)
...并使用 Firefox v.63 获得完美结果。
但是用 Chrome v.71 运行这个我得到
Uncaught SyntaxError: Unexpected end of JSON input
Run Code Online (Sandbox Code Playgroud)
由于this.innerHTML返回空字符串。
我还尝试了其他 DOM 方法来访问文本内容,但也都失败了。
现在我对如何让它与 Chrome 一起工作一无所知。
顺便说一句:使用<slot>没有任何帮助,因为我不想渲染文本内容......只能访问它进行解析。
解决:
您应该等待内容出现。
在大多数情况下,简单的延迟就可以解决问题:
connectedCallback() {
setTimeout( () => JSON.parse(this.innerHTML) )
}
Run Code Online (Sandbox Code Playgroud)
或者,实际上<slot>可以为该slotchange活动提供帮助。如果您不需要,可以隐藏渲染或删除内容。
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |