Winter'17バージョンからSalesforceは雷フレーム機構ロッカーサービスを導入し始めました。
ロッカーサービスはメカニズムが雷アプリケーションのセキュリティを強化することができます導入しました。
ロッカーサービスの役割
ライトニングは、HTMLページの様々な要素(DOMツリーを参照することにより、「ドキュメントオブジェクトモデルツリー」を含むJavaScriptアプリケーションのアプリケーションの性質である公式の定義)。
同時に、雷は異なる開発者からのコンポーネントはDOMに同じページの申込書で存在することができ、コンポーネントベースのアプリケーションです。任意の保護措置がなければ、DOMはお互いにアクセス可能であり、したがって、セキュリティ上のリスク。
「稲妻:選択」:標準的な成分として、フレームに雷が、ネームスペース(名前空間)によって異なるソースのアセンブリが決定「ボタンUI」を有する他の、それらは異なる名前空間に属しています。
ロッカーサービスの主な役割は、アセンブリは、それらの間のアクセスを制限するために、異なる名前空間にカプセル化され、仮想DOM要素を提供することです。
パッケージアセンブリ
事前定義されたセキュリティ・コンポーネントの数におけるロッカーサービスは、実際のDOMは、例えば、カプセル化されました。
- SecureComponent:同じパッケージ一緒に名前空間のコンポーネント要素
- 別の名前空間の構成要素:SecureComponentRef
- SecureWindow:ウィンドウ要素をカプセル化
- SecureDocument:ドキュメント要素カプセル化
サンプルコード
コードの実用化ピースを通じて状況で見てみましょう。
ライトニングコンポーネント:
<aura:component >
<!-- 定义一个 div 元素 -->
<div id="idDiv" aura:id="idDiv">
<p>Hello World!</p>
</div>
<!-- 定义一个 lightning 命名空间下的 button 元素 -->
<lightning:button name="button" label="click here" aura:id="idButton" onclick="{!c.handleClick}" />
</aura:component>
コントローラコードに対応します。
({
handleClick : function(component, event, helper) {
debugger;
},
})
ユーザーがボタンをクリックした後、JavaScriptデバッガステートメントは、私たちにブレークポイントデバッグコンソールを可能にします。
今、私たちは、コマンドを実行します。
コマンド:
window+''
結果:
"SecureWindow: [object Window]{ key: {"namespace":"c"} }"
説明:
私たちは、あなたは結果が元のウィンドウ要素がパッケージ化されてきたと言うことですSecureWindow要素、に記載されている見ることができ、ウィンドウの要素を示したいと思います。
コマンド:
component.find('idDiv')+''
結果:
"SecureComponent: markup://aura:html {5:0} {idDiv}{ key: {"namespace":"c"} }"
説明:
私たちは、あなたがそれの結果がSecureComponent要素にパッケージ化された、その名前空間がデフォルトの名前空間の基本的なHTML要素である「C」、で見ることができ、div要素を示したいと思います。
コマンド:
component.find('idButton')+''
結果:
"SecureComponentRef: markup://lightning:button {8:0} {idButton}{ key: {"namespace":"c"} }"
説明:
私たちは、雷を表示する:ボタン要素、結果はそれがSecureComponentRef要素にパッケージ化されていることがわかる、その名前空間は「C」です。雷:「稲妻」は、ボタン要素自体の名前空間ですが、種類がSecureComponentRefがあるので、今それが参照されている名前空間は、コンポーネントの「C」です。
コマンド:
component.find('idButton').getElement()+''
結果:
Uncaught TypeError: component.find(...).getElement is not a function
説明:
私たちは、雷表示する:ボタン元素含有量、間違いの結果を、理由はそれは、名前空間「雷」に属していることですが、私たちのライブのコンポーネントは、名前空間「C」に所属し、ロッカーサービスは、それらの間のアクセスを制限します。