sforce.oneオブジェクトによるLightning Experienceでのページ遷移

Posted by

sforce.oneオブジェクトによるLightning Experienceでのページ遷移

Visualforceページはページ遷移する際には通常、遷移先のVFページを指定したPageReferenceをApexから返すことで遷移先へリダイレクトして遷移をさせます。
場合によってはJavaScriptのロジックでページを遷移させる際には、location.hrefでVFページのURLを指定して遷移させる方法もあります。

Lightning Experienceに埋め込まれたVisualforceページでは、location.hrefを使用した遷移は下記の通り推奨されておらず、sforce.oneを使うように記載されております。

window.location を直接設定しない
これだけ言えば大丈夫でしょうか。この理由は簡単です。Lightning Experience では、ページに設定する window.location がないためです。Visualforce の「コンテナ」や、iframe でラップされること、Lightning Experience が単一ページアプリケーション (SPA) であることなどはすでに説明しましたが、この点も追記しておく必要があります。Visualforce の iframe は window.location 値に直接アクセスできず、したがってこの値を設定することができません。コードがこの設定に依存している場合、そのコードは壊れます。つまり、window.location を設定してナビゲーションを起動するアクションによって、意図する移動先へのナビゲーションが停止します。

location.hrefは、現状Lightningでも動作しますが、いつサポートされなくなるかわからない点と、ブラウザの戻るを使った時の挙動が正しくならない可能性がある点等が考えられるので、Lightningで動作させるVFのページ遷移をJSで実装する際はsforce.oneオブジェクトを使用しましょう。

なお、sforceを使った遷移をいくつか動作検証したソースコードは下記になります。
https://github.com/yhayashi30/test-sforce-one

参考

sforce.one オブジェクトを使用したナビゲーションおよびメッセージ
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce1.meta/salesforce1/salesforce1_dev_jsapi_sforce_one.htm

ナビゲーションの管理
https://trailhead.salesforce.com/ja/content/learn/modules/lex_dev_visualforce/lex_dev_visualforce_navigation