この記事の目次
SalesforceのLightningコンポーネントとVisualforce間で通信するには?
![](https://b-engineer-media-cms.s3.amazonaws.com/item/image/user/356a192b7913b04c54574d18c28d46e6395428ab/7e58a2de-f3e8-4962-96d8-0f498667fd8e.jpg)
LightningコンポーネントとVisualforce間で通信する方法
![](https://b-engineer-media-cms.s3.amazonaws.com/item/image/user/356a192b7913b04c54574d18c28d46e6395428ab/7dbb12a1-8c30-483a-a005-82dd0f8d7ee5.jpg)
LightningコンポーネントからVisualforceページにメッセージを送信する方法
ここでは、Lightningコンポーネントからiframeで読み込んだVisualforceページにメッセージを送信する方法を実装例とともに紹介します。【Step1】LightningコンポーネントのComponentを実装する
メッセージを送るLightningコンポーネントのComponentを実装します。<aura:component implements=""flexipage:availableForAllPageTypes"" access=""global"">
<aura:attribute name=""message"" type=""String""/>
<!-- Visualforceページの読み込み元ホスト名. -->
<aura:attribute name=""vfHost"" type=""String""
default=""testdomain-dev-ed--c.visual.force.com""/>
<lightning:input type=""text"" label=""メッセージ:"" value=""{!v.message}""/>
<lightning:button label=""Visualforceページへ送信"" onclick=""{!c.sendToVF}""/>
<iframe aura:id=""vfFrame"" src=""{!'https://' + v.vfHost + '/apex/myvfpage'}""/>
</aura:component>
【Step2】メッセージ送信ボタンクリック時のControllerを実装する
メッセージ送信ボタンクリック時のControllerでVisualforceページにメッセージを送るよう実装します。({
sendToVF: function (component, event, helper) {
var message = component.get(""v.message"");
// Visualforceページの読み込み元ホスト名を取得し、
// 「プロトコル+ホスト名」のURLを生成
var vfOrigin = ""https://"" + component.get(""v.vfHost"");
// VisualforceページのWindow オブジェクトを取得
var vfWindow = component.find(""vfFrame"").getElement().contentWindow;
// window.postMessage()でVisualforceページにメッセージを送る
// 第1引数は送信メッセージを指定
// 第2引数は送信先Visualforceページを指定
vfWindow.postMessage(message, vfOrigin);
}
})
【Step3】Visualforceページでメッセージの受信処理を実装する
Visualforceページでメッセージ受信処理を実装します。<apex:page>
<script>
// Lightningコンポーネントの読み込み元の「プロトコル+ホスト名(+ポート番号)」
var lexOrigin = ""https://testdomain-dev-ed.lightning.force.com"";
// メッセージを受信した時のイベントを追加
window.addEventListener(""message"", function(event) {
// メッセージ受信イベントの発生元を判定
if (event.origin !== lexOrigin) {
// セキュリティを考慮し、メッセージ受信イベントの発生元が
// Lightningコンポーネントの読み込み元と一致しない場合は処理を中断
return;
}
// コンソールにメッセージを出力
console.log(event.data);
}, false);
</script>
</apex:page>
VisualforceページからLightningコンポーネントへメッセージを送信する方法
ここでは、VisualforceページからLightningコンポーネントにメッセージを送信する方法を実装例とともに紹介します。【Step1】Visualforceページを実装する
メッセージを送信するVisualforceページを実装します。<apex:page>
<input id=""message"" type=""text""/>
<button onclick=""sendToLC()"">Lightningコンポーネントへ送信</button>
<script>
// Lightningコンポーネントの読み込み元の「プロトコル+ホスト名(+ポート番号)」
var lcOrigin = ""https://testdomain-dev-ed.lightning.force.com"";
function sendToLC() {
var message = document.getElementById(""message"").value;
// 親windowであるLightningコンポーネントにメッセージを送信
// 第1引数は送信メッセージを指定
// 第2引数は送信先のLightningコンポーネントを指定
parent.postMessage(message, lcOrigin);
}
</script>
</apex:page>
【Step2】メッセージを受信するComponentを実装する
メッセージを受信するComponentを実装します。<aura:component implements=""flexipage:availableForAllPageTypes"" access=""global"">
<!-- Visualforceページの読み込み元ホスト名. -->
<aura:attribute name=""vfHost"" type=""String""
default=""testdomain-dev-ed--c.visual.force.com""/>
<!-- メッセージを受信する関数を設定 -->
<aura:handler name=""init"" value=""{!this}"" action=""{!c.doInit}""/>
<iframe aura:id=""vfFrame"" src=""{!'https://' + v.vfHost + '/apex/myvfpage'}"" />
</aura:component>
【Step3】メッセージを受信するControllerを実装する
Visualforceページからのメッセージを受信するControllerを実装します。({
doInit: function (component) {
// Visualforceページの読み込み元の「プロトコル+ホスト名(+ポート番号)」
var vfOrigin = ""https://"" + component.get(""v.vfHost"");
// メッセージを受信した時のイベントを追加
window.addEventListener(""message"", $A.getCallback(function (event) {
// メッセージ受信イベントの発生元を判定
if (event.origin !== vfOrigin) {
// セキュリティを考慮し、メッセージ受信イベントの発生元が
// Visualforceページの読み込み元と一致しない場合は処理を中断
return;
}
// コンソールにメッセージを出力
console.log(event.data);
}), false);
}
})
window.postMessage()を利用して、機能間でのメッセージの送受信を実装してみよう
![](https://b-engineer-media-cms.s3.amazonaws.com/item/image/user/8c7f204d9ede4027afb1e4450514b993d07cd4a1/660227e9-6a91-4eeb-9c7a-32517e6a6ec4.jpg)
この記事の監修者・著者
![株式会社オープンアップITエンジニア](https://tenshoku-careerchange.jp/wp-content/uploads/2023/07/fzxADbr-_400x400-1-150x150.jpg)
-
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
最新の投稿
- 2024年3月26日キャリア・転職保安職(自衛官・警察・消防官など)に向いている人の性格・特徴ランキング【現役保安職(自衛官・警察・消防官など)36人が回答】
- 2024年3月26日キャリア・転職保安職(自衛官・警察・消防官など)に必要なスキルランキング&スキルアップの方法とは?【現役保安職(自衛官・警察・消防官など)36人が回答】
- 2024年3月26日キャリア・転職クリエイター職(ライター・デザイナー・編集)に向いている人の性格・特徴ランキング【現役クリエイター職(ライター・デザイナー・編集)64人が回答】
- 2024年3月26日キャリア・転職クリエイター職(ライター・デザイナー・編集)に必要なスキルランキング&スキルアップの方法とは?【現役クリエイター職(ライター・デザイナー・編集)64人が回答】