17

目標:カプセル化されたウィジェット

私が次のような友達のリストを表示するウィジェットの開発者であるとします。

友達のマイケル、アンナ、シャーリーはこのウェブページが大好きです!

最初のアプローチ:作成するスクリプトspan

span素朴に、私はこの情報をWebサイトのに配置するスクリプトを作成します。ただし、ExampleSiteの所有者は、簡単なDOM操作で友達の名前にアクセスできるようになりました。
これはプライバシー/セキュリティの大きな問題です。

2番目のアプローチ:iframe

ExampleSiteに友達の名前へのアクセスを許可したくありません。代わりに、ウェブサイトの所有者にウィジェットを追加さ​​せますiframe

<iframe src="http://fakebook.com/friends?page=http%3A%2F%2Fexample.org%2F"></iframe>

ExampleSiteの所有者は、のコンテンツをスクレイプできないため、これは機能しiframeます。ただし、この全体iframeはかなり醜いです。なぜなら、それはWebサイトのスタイリングに統合されていないspanのですが、統合されているからです。

望ましいアプローチ:Shadow DOM

昨日ShadowDomについて読んだとき、それが両方の問題の解決策になるのではないかと思いましspanこれにより、元のWebサイトがアクセスできないようにするスクリプトを作成できます。

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仕様では、機能的なカプセル化が提供されていると書かれていますが実際には信頼できるカプセル化が必要です。コンポーネントモデルのユースケースには実際にこのユースケースがリストされていますが、ShadowDOMが必要な制限プロパティを実現しているかどうかはわかりません。

4

1 に答える 1

8

そうではありませんが、作業中です:https ://www.w3.org/Bugs/Public/show_bug.cgi?id=20144

信頼のカプセル化には、シャドウツリーごとに新しいスクリプトコンテキストを作成することが含まれますが、これはほとんどのシナリオではやり過ぎです。ただし、バグが示すように、これを可能にするフラグ(詳細は未定)を追加します。

于 2013-01-15T20:39:59.013 に答える