我正在构建一个模块化的Web应用程序,其中将处理各种用户创建的模型。 Shadow DOM是一个显而易见的选择,但我不明白如何在shadow DOM中执行JS。
我有一个HTML内容要加载以下虚拟脚本。
<h1>Nice header</h1>
<script type="text/javascript">
console.log('hello')
alert('hi');
</script>
我使用之前的脚本加载页面,如下所示:
<div id="shadow-target"></div>
<div id="non-shadow-target"></div>
<script>
// Called on btn click
loadShadow = function(module) {
var root = document.querySelector('#shadow-target').createShadowRoot();
var lighttarget = document.querySelector('#non-shadow-target');
$.get('whatever.html', function (data) {
alert(data);
$(root).append(data); // Nothing executed
$(lighttarget).append(data); // Works fine
// The header appears in both cases
});
}
</script>
正如评论所说,当内容插入到shadow DOM根目录时,JS不会被执行。标题出现在两种情况下,但脚本仅在轻型DOM中执行。这是为什么?如何在shadow DOM中执行自定义JS? (没有跨领域的东西。)