Salesforceのロッカーサービスについて

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」に所属し、ロッカーサービスは、それらの間のアクセスを制限します。

おすすめ

転載: www.cnblogs.com/chengcheng0148/p/locker_service_intro.html