假设我是FakeBook™朋友小部件的开发人员。我为网站所有者提供了一个小部件,可以将这样的个性化消息添加到他们的页面中:
你的朋友Michael,Anna和Shirley喜欢这个网页!
span
天真地,我创建了一个脚本,将此信息放在网站上的span
中。但是,ExampleSite的所有者现在可以通过简单的DOM操作访问您朋友的名字!
这是一个很大的隐私/安全问题。
iframe
我不希望ExampleSite访问他们朋友的名字。相反,我让网站所有者使用iframe
添加小部件:
<iframe src="http://fakebook.com/friends?page=http%3A%2F%2Fexample.org%2F"></iframe>
这样可行,因为ExampleSite的所有者无法抓取iframe
的内容。但是,整个iframe
这个问题相当丑陋,因为没有将整合到网站的样式中,而span
就是这样。
昨天在阅读Shadow Dom时,我想知道这是否可以解决这两个问题。这将允许我创建一个脚本,创建原始网站无法访问的span
:
var host = document.querySelector('#friends');
var root = host.webkitCreateShadowRoot();
root.textContent = 'Your friends Michael, Anna and Shirley love this webpage!';
但是, Shadow DOM是否会将其内容隐藏在周围的页面中?
这里的假设是除了我的脚本之外没有人可以访问root
,但这是正确的吗?
Shadow DOM spec毕竟说它提供了功能封装,但实际上我想要信任封装。虽然组件模型用例实际列出this use case,但我不确定Shadow DOM是否实现了nesessary confinement 属性。
答案 0 :(得分:8)
它没有,但它正在起作用:https://www.w3.org/Bugs/Public/show_bug.cgi?id=20144
信任的封装将涉及为每个影子树创建一个新的脚本上下文,这对于大多数场景来说都是过度的。但是,正如bug所说,我们将添加一个允许这样做的标志(详细信息TBD)。