この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Lightning コンテナコンポーネントからのメッセージの送信

lightning:containeronmessage 属性を使用して、コンポーネントのコンテンツ (つまり、組込みアプリケーション) との間のメッセージを処理するメソッドを指定します。lightning:container のコンテンツは iframe 内でラップされます。この方法によって、フレームの境界を超える通信ができます。

この例は、lightning:container を含み、3 つの属性 (messageToSendmessageReceivederror) を持つ Aura コンポーネントを示しています。

この例は、「サードパーティフレームワークの使用」の例と同じコードを使用します。この例の完全版は、Developerforce GitHub リポジトリからダウンロードできます。

1<aura:component access="global" implements="flexipage:availableForAllPageTypes" >
2    <aura:attribute access="private" name="messageToSend" type="String" default=""/>
3    <aura:attribute access="private" name="messageReceived" type="String" default=""/>
4    <aura:attribute access="private" name="error" type="String" default=""/>
5    
6    <div>
7        <lightning:input name="messageToSend" value="{!v.messageToSend}" label="Message to send to React app: "/>
8        <lightning:button label="Send" onclick="{!c.sendMessage}"/>
9        <br/>
10        <lightning:textarea value="{!v.messageReceived}" label="Message received from React app: "/>
11        <br/>
12        <aura:if isTrue="{! !empty(v.error)}">
13            <lightning:textarea name="errorTextArea" value="{!v.error}" label="Error: "/>
14        </aura:if>
15    
16        <lightning:container aura:id="ReactApp"
17                             src="{!$Resource.SendReceiveMessages + '/index.html'}"
18                             onmessage="{!c.handleMessage}"
19                             onerror="{!c.handleError}"/>
20    </div>
21</aura:component>

messageToSend は、フレーム化されたアプリケーションに Salesforce から送信されたメッセージを表し、messageReceived は、アプリケーションが Aura コンポーネントに送信したメッセージを表します。lightning:container には、必須の src 属性と、aura:id および onmessage 属性が含まれます。onmessage 属性には、JavaScript コントローラのメッセージ処理メソッドを指定し、aura:id を使用してこのメソッドでコンポーネントを参照できます。

この例は、コンポーネントの JavaScript コントローラを示しています。

1({    
2    sendMessage : function(component, event, helper) {
3        
4        var msg = {
5            name: "General",
6            value: component.get("v.messageToSend")
7        };
8        component.find("ReactApp").message(msg);
9    },
10    
11    handleMessage: function(component, message, helper) {
12        var payload = message.getParams().payload;
13        var name = payload.name;
14        if (name === "General") {
15            var value = payload.value;
16            component.set("v.messageReceived", value);
17        }
18        else if (name === "Foo") {
19            // A different response
20        }
21    },
22    
23    handleError: function(component, error, helper) {
24        var e = error;
25    }
26})

このコードはいくつかの異なる処理を実行します。sendMessage アクションでは、囲んでいる Aura コンポーネントから組み込みアプリケーションにメッセージを送信します。これは、namevalue を含む JSON 定義を持つ変数 msg を作成します。このメッセージの定義はユーザが定義します。つまり、メッセージのペイロードを値や、構造化された JSON 応答などにすることができます。Aura コンポーネントの messageToSend 属性はメッセージの value に設定されます。次に、メソッドはコンポーネントの aura:idmessage() 関数を使用して、メッセージを Aura コンポーネントに送り返します。

handleMessage メソッドは、組み込みアプリケーションからメッセージを受信して適切に処理します。これは、コンポーネント、メッセージ、およびヘルパーを引数として取ります。このメソッドは条件ロジックを使用してメッセージを解析します。これが、namevalue を持つ予期されたメッセージの場合、メソッドは Aura コンポーネントの messageReceived 属性をメッセージの value に設定します。このコードは 1 つのメッセージのみを定義しますが、条件ステートメントを使用すると、sendMessage メソッドで定義されたさまざまな種別のメッセージを処理できます。

メッセージを送受信するためのハンドラコードは複雑になる可能性があります。Aura コンポーネント、そのコントローラ、およびアプリケーション間のメッセージのフローを理解することをお勧めします。ユーザが messageToSend 属性としてメッセージを入力すると、処理が開始されます。ユーザが [Send (送信)] をクリックすると、コンポーネントは sendMessage をコールします。sendMessage はメッセージペイロードを定義し、message() メソッドを使用してメッセージペイロードをアプリケーションに送信します。アプリケーションを定義する静的リソース内で、指定されたメッセージハンドラ関数がメッセージを受信します。lightning-container モジュールの addMessageHandler() メソッドを使用して、JavaScript コード内でメッセージ処理関数を指定します。詳細は、「lightning-container NPM モジュールリファレンス」を参照してください。

lightning:container は、フレーム化されたアプリケーションからメッセージを受信すると、lightning:containeronmessage 属性に設定された、コンポーネントのコントローラの handleMessage メソッドをコールします。handleMessage メソッドはメッセージを取得し、その値を messageReceived 属性として設定します。最後に、コンポーネントは messageReceivedlightning:textarea に表示します。

これは、コンテナを横断するメッセージ処理の簡単な例です。アプリケーションのコントローラ側のコードと機能を実装するため、Salesforce と、lightning:container に埋め込まれたアプリケーション間のあらゆる種類の通信でこの機能を使用できます。

API 鍵などの暗号化の秘密をメッセージで送信しないでください。API 鍵のセキュリティを確保することが重要です。

重要