VisualforceページでLightning ExperienceとSalesforce Classicの判別をする
Visualforceページを作っていて、Lightning ExperienceとSalesforce Classicでコードの処理内容を分岐させたいと思った事があるのではないだろうか。今回はJavaScriptを用いてユーザーがどちらのUIを使用しているのかを判別する方法を記述する。
IsLightningOrSalesforceClassic.vfp
<apex:page >
<apex:includeScript value="https://code.jquery.com/jquery-3.2.1.min.js"/>
<script type="text/javascript" import="true">
function IsLightningOrSalesforceClassic() {
return((typeof sforce != 'undefined') && sforce && (!!sforce.one));
}
function checkExperience(){
if(IsLightningOrSalesforceClassic()) {
alert('LightningExperienceです');
} else {
alert('ClassicExperienceです');
}
}
$(function(){
checkExperience();
});
</script>
</apex:page>
説明
内容としては簡単である。"sforceオブジェクトが定義されているか"そして定義されている場合はoneプロパティが有効化されているかどうかを確認している。
sforceオブジェクトが定義されていない場合はClassic UIで、かつsforceオブジェクトが定義されつつも.oneプロパティが有効になっている場合はSalesforceアプリ(Salesforce1アプリ)であると判断出来る。
Salesforceオブジェクトが定義されており、かつ.oneプロパティが無効になっている場合はLightning Experienceであると判断できるという仕組みである。