4
我正在构建一个模块化的Web应用程序,其中处理各种用户创建的模型。 Shadow DOM是一个明显的选择,但我不明白JS如何在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>
正如评论说,不执行JS当内容被插入到影子DOM根。标题出现在两种情况下,但脚本仅在轻型DOM中执行。这是为什么?自定义JS如何在shadow DOM中执行? (没有跨域的东西。)
问题是,它有什么不同,阴影DOM只是一个构造来创建自定义HTML模板,可以插入标签等(多一点,但无论如何),它不是一个“不同” “一个新的线程和/或执行上下文,这将是一个webworker。 – adeneo
另请注意,使用ajax获取带脚本标记的HTML时存在已知问题,并且还会将脚本标记作为字符串插入到DOM中。 – adeneo
既然你可以使用shadow DOM,我认为你应该看看[自定义元素](http://www.html5rocks.com/en/tutorials/webcomponents/customelements/):shadow DOM和自定义元素是部分的Web组件项目,所以你应该一起查看它们。 – MaxArt