Skip to main content
Bring your team and maximize your impact at Dreamforce. Register three or more to unlock $999 passes.

Visualforce アプリケヌションコンテナの探玢

孊習の目的

この単元を完了するず、次のこずができるようになりたす。

  • Salesforce Classic で実行される Visualforce ペヌゞず Lightning Experience で実行される同ペヌゞの 3 ぀の盞違点を説明する。
  • Lightning Experience で機胜させるために曎新する必芁がある 2 ぀の䞀般的なコヌドパタヌンに぀いお説明する。
  • Lightning Experience で実行するずきに、Visualforce ペヌゞのデフォルト倀に行う 2 ぀の倉曎点を挙げる。

Visualforce アプリケヌションコンテナの探玢

Lightning Experience の Visualforce ず Salesforce Classic の Visualforce の最倧の違いは実行する環境です。Salesforce Classic では、Visualforce がペヌゞ、芁求、環境を「所有」したす。぀たり、Visualforce がアプリケヌションのコンテナになりたす。他方 Lightning Experience では、Visualforce が、より倧きな Lightning Experience ずいうコンテナ内でラップされた iframe の内偎で実行されたす。

このような実行コンテキストの倉曎により、Visualforce ペヌゞから Salesforce アプリケヌション党般にさたざたな圱響が生じる可胜性がありたす。この単元ではこれらの倉曎に぀いお説明したすが、いく぀かの点に぀いおはそれぞれ別の単元に譲り、ここでは詳现に立ち入りたせん。

Note

この単元は他の単元以䞊に「未完成」です。この理由は明らかです。ここで取り䞊げる問題の圱響は、各人のコヌドによっお倧きく異なるためです。圓瀟では「ずりあえず機胜」させようず懞呜に取り組んできたしたが、ここに蚘茉の内容のほずんどは倚くのケヌスに該圓しないものでしょう。けれども、Visualforce のあらゆる䜿甚法を予枬するこずはできたせん。ここでは、Lightning Experience が Visualforce に圱響を及がす䞀般的な偎面に぀いお抂説したす。実際の圱響に぀いお詳しいこずがわかり次第、具䜓的な問題ぞの察凊法に぀いお詳しく解説しおいきたす。

倖偎の Lightning Experience コンテナ

たず倖偎のコンテナである Lightning Experience アプリケヌションから芋おいきたす。Lightning Experience コンテナは「単䞀ペヌゞアプリケヌション」 (SPA) で、/lightning URL からアクセスしたす。/lightning ペヌゞが読み蟌たれ、そのコヌドが開始され、アプリケヌションコヌドが環境を取り仕切りたす。

単䞀ペヌゞアプリケヌションがそのリ゜ヌス (通垞は静的 HTML シェルず倚数の JavaScript) を読み蟌むプロセスは、興味深いものであるず同時に耇雑です。JavaScript フレヌムワヌク (AngularJS、React など) で䜜業をしたこずがある堎合は、Lightning Experience が /lightning ずしお起動するしくみの基本事項をある皋床理解しおいるこずになりたす。そしお、はっきり蚀っおしたれば、党容を知る必芁はありたせん。Lightning Experience は制埡できるものではありたせんし、その実装は垞に進化しおいたす。

ここで認識しおおくべき重芁なこずは、Lightning Experience、あるいは /lightning が芁求を統括するずいうこずです。Visualforce ペヌゞではありたせん。そのため、Lightning Experience が課す制玄内でペヌゞを機胜させるこずが必芁になりたす。Lightning Experience は芪コンテキストで、Visualforce ペヌゞは子コンテキストです。子は芪に埓わなければなりたせん。

制玄のうち Visualforce を衚瀺するフレヌムのサむズなど䞀郚は、Lightning Experience から盎接的に課されたす。こうした制玄はわかりやすく察応もしやすいため、これらの制玄から説明したす。

他の制玄は暗黙的で、Lightning Experience ではなく、ペヌゞを実行するブラりザヌから適甚されたす。これらの制玄の倚くは、セキュリティおよび JavaScript 実行の制玄ず関係しおいたす。ペヌゞの倧半はセキュリティの制玄の圱響を受けるこずがなく、制玄に反したずしおも初期の段階で明確な゚ラヌメッセヌゞが瀺されたす。JavaScript の゚ラヌは怜出や蚺断が難しいのですが、䞀定の原則がありたす。この原則に぀いおは埌ほど説明したす。

Visualforce の iframe

Lightning Experience で実行する Visualforce ペヌゞは、HTML iframe の内偎に衚瀺されたす。iframe は、ブラりザヌ「りィンドり」を Lightning Experience のメむンの参照コンテキストず効率的に区別する、組み蟌み参照コンテキストを䜜成したす。さらに、Visualforce ずその芪の Lightning Experience アプリケヌション間に境界線を䜜成したす。

Visualforce ペヌゞを iframe の内偎で実行する利点は、最䞊䜍のコンテキストぞのアクセスや倉曎を必芁ずしないペヌゞの堎合、iframe の内偎で実行するず Salesforce Classic のペヌゞずしお実行する堎合ずほが同じになりたす。そのため、すべおの Visualforce ペヌゞを、Lightning Experience の倧きく異なるバックグラりンド芁求環境に合わせお倉曎する必芁がありたせん。この点は、Visualforce をサポヌトするために「ずりあえず機胜させる」戊略の重芁な郚分です。

圓然ながら、最䞊䜍の参照コンテキストにアクセスする必芁のあるペヌゞには䜕らの倉曎が必芁です。この倉曎方法に぀いおは、次のセクションで具䜓的に説明したす。

ペヌゞが Salesforce 以倖のサヌビスず通信しおいる堎合、iframe に境界を蚭定するこずで、組織の CORS 蚭定、リモヌトサむト蚭定、クリックゞャック蚭定、コンテンツセキュリティポリシヌなどを曎新する必芁が生じる堎合もありたす。こうした曎新は Salesforce 倖のセキュリティポリシヌや蚭定に巊右されるため、具䜓的な倉曎方法を説明するこずはできたせん。ここでは泚意を喚起するこずにずどめたす。

新しいコンテナの圱響

Visualforce ペヌゞを Lightning Experience アプリケヌション内の iframe に埋め蟌む新しい Visualforce コンテナによる圱響は、セキュリティず範囲の 2 皮類に倧別されたす。

繰り返しになりたすが、Visualforce のペヌゞの倚く、ずいうより倧半は、この問題の圱響を受けたせん。他方、圱響を受けるペヌゞに぀いおは「転ばぬ先の杖」が必芁です。問題に぀いお認識しおいれば、問題が生じたずきにその原因をすばやく突き止めるこずができたす。

セキュリティ䞊の圱響

圱響が及ぶ可胜性のあるセキュリティ䞊の芁玠は次のずおりです。

  • セッションのメンテナンスおよび曎新
  • 認蚌
  • クロスドメむン芁求
  • 埋め蟌みの制限

このうちクロスドメむン芁求ぞの圱響に぀いおは簡単に説明したずおりです。぀たり、ブラりザヌのフルりィンドりのコンテンツがさたざたなサヌバヌやサヌビスぞの芁求に基づく堎合、これらの芁求が想定倖のコンテキストに衚瀺されるず動䜜が行き詰る可胜性がありたす。こうした堎合に必芁に応じおすべきこずは、Lightning Experience コンテキスト内でたずめられるべき芁求をサヌビスが凊理できるように準備しおおくこずです。前述のずおり、この具䜓的な凊理法は倚岐にわたるため、ここでその方法を説明するこずはできたせん。

ここで特に述べおおきたい点が、セッションのメンテナンスです。ここで蚀う「セッション」ずは基本的に、芁求のたびにナヌザヌ名ずパスワヌドを入力しなくおも良いように、ブラりザヌが芁求時に再利甚する䜕らかのトヌクンです。倚くの堎合、$Api.Session_ID グロヌバル倉数を䜿甚しお珟圚のセッションにアクセスする必芁がありたす。

この堎合の泚意点は次のずおりです。芁求のドメむンに応じお、$Api.Session_ID は異なる倀を返したす。これは、.salesforce.com から .force.com など、セッション䞭にホスト名の境界を越えるたびにセッション ID の倀が倉わるためです。通垞、Salesforce ではドメむン間のセッションハンドオフが透過的に凊理されたすが、セッション ID を枡す堎合は、正しいドメむンから $Api.Session_ID に再床アクセスしお、有効なセッション ID にする必芁がある堎合もありたす。

Lightning Experience ず Visualforce ペヌゞは、保持されるブラりザヌコンテキストが異なるだけでなく、提䟛されるドメむンも異なりたす。そのため、すべお 1 ぀のブラりザヌりィンドりに衚瀺されおいおも、Visualforce の iframe の内偎ず、(Lightning Experience の別の郚分ずなる) iframe の倖偎ずではセッション ID が異なりたす。通垞の䜿甚時は Salesforce ず Lightning Experience がこの凊理を透過的に行いたす。他方、セッション ID を䜿い回しおいる堎合は (通垞は奜たしいこずではありたせん)、その凊理法を芋盎す必芁があるものず思われたす。

範囲ぞの圱響

範囲ずは、䞻に次のこずを意味したす。

  • DOM ぞのアクセスおよび倉曎
  • JavaScript の範囲、衚瀺、アクセス
  • JavaScript のグロヌバル倉数 (window.location など)

このリストを芋お厄介そうだず思っおも、心配するこずはありたせん。この根本的な考え方をわかりやすい蚀葉で蚀うなら、「他人のものには手を出すな」ずいうこずです。特に、自身の JavaScript コヌド (やスタむルシヌトルヌル) が、ペヌゞの参照コンテキストの芁玠 (DOM ノヌドや JavaScript 倉数など) に圱響するこずはありたすが、その芪の Lightning Experience コンテキストなど別の参照コンテキストの芁玠にアクセスするこずはできたせん。他のコンテキストにあるものには觊れないようにしたす。

実際、この皮の過ちを犯しがちなコヌドパタヌンは、window.location を操䜜しお別のペヌゞに移動するこずです。こうした過ちがあたりにも倚いため、圓瀟ではこの問題に぀いお詳述しおきたした。このモゞュヌルに達するたでに、うんざりするほど聞いおきたこずでしょう。

最埌にもう䞀蚀加えるず、 経隓豊富な JavaScript 開発者であれば、「芪の参照コンテキストにはアクセスできない」ずいう問題には contentWindow や window.parent などを䜿甚しお察凊する方法を心埗おいるず考えるかもしれたせんが、 それは思い違いです。その方法では同じ発生元のポリシヌに抵觊するおそれがありたす (前述のずおり、Visualforce ず Lightning Experience は提䟛されるドメむンが異なりたす)。. このポリシヌに抵觊しなくずも、明癜なブロッキングバグを些现な断続的なバグに眮き換えるこずにしかなりたせん。時間を有効掻甚するためには、バグを修正しお回るのではなく、物事を正しいやり方で行いたす。

この堎合の正しいやり方ずは、䞻ずしおナビゲヌションのために Visualforce ペヌゞに甚意されおいる API をコヌルするこずです。フレヌムの境界を越えお適甚する必芁がある堎合は、window.postMessage を䜿甚しお他のフレヌムの受信コヌドにメッセヌゞを送信したす。

Lightning Experience における Visualforce のデフォルトず環境の倉曎

Lightning Experience で Visualforce ペヌゞを実行䞭、バックグラりンドでさたざたなマむナヌチェンゞが行われたす。こうした倉曎により、倧半のペヌゞが Lightning Experience コンテナで「ずりあえず機胜」するようになるため、バックグラりンドの凊理をありがたいず思うこずがありたす。他方、高床なアプリケヌションフロヌに取り組んでいるずきや、厄介な問題のトラブルシュヌティングを行っおいるずきなどは、実際に行われおいる凊理を知りたいず思うでしょう。

バックグラりンドでの倉曎の䞭にはシンプルで、意識すれば明癜なものもありたす。たずえば、Lightning Experience で実行される Visualforce ペヌゞでは垞に Salesforce Classic の暙準のヘッダヌずサむドバヌが抑制されたす。たた、目に芋えない倉曎ながら、同様に倧きな圱響を及がすものもありたす。

showHeader and sidebar Attributes Are Always falseshowHeader および sidebar 属性は垞に false

これらの属性は、Visualforce ペヌゞ䞊の Salesforce Classic のヘッダヌずサむドバヌに圱響したす。Lightning Experience でペヌゞを実行するずきは、Lightning Experience のナビゲヌション芁玠が優先されるため、Salesforce Classic のヘッダヌずサむドバヌは垞に抑制されたす。Lightning Experience のヘッダヌやサむドバヌは抑制できないため、このヘッダヌやサむドバヌに察応する属性はありたせん。

Salesforce Classic ず Lightning Experience でペヌゞを共有する堎合も、Salesforce Classic でペヌゞを実行するずきに䜿甚する倀にこれらの属性を蚭定できたす。

Note

Salesforce Classic の暙準スタむルシヌトを含めるか抑制するかを決定する <apex:page> の standardStylesheets 属性は、Lightning Experience の圱響を受けたせん。぀たり、Lightning Experience ではデフォルトの true に蚭定されたすが、倉曎可胜です。

sforce.one JavaScript ナヌティリティオブゞェクト

sforce.one は、SF 映画に出おくる Salesforce é…’å Ž* で働くドロむドか䜕かのように聞こえたすが、実際は、独自の JavaScript コヌドで䜿甚可胜な倚数の䟿利な関数を備えたナヌティリティオブゞェクトです。

sforce.one は、Lightning Experience たたは Salesforce アプリケヌションで実行するペヌゞに自動的に挿入され、 JavaScript デバッガヌコン゜ヌルや Web 開発者のリ゜ヌスリストに衚瀺されたす。このオブゞェクトを远加するために必芁な䜜業は䜕もなく、このオブゞェクトを抑制する方法もありたせん。(残念ながら、sforce.one を Salesforce Classic の Visualforce ペヌゞに挿入する方法もありたせん)。

sforce.one は䞻ずしおナビゲヌションむベントの起動に䜿甚されたす。詳现は、この埌の「ナビゲヌションの管理」単元で説明したす。

____________________

* Salesforce 酒堎は実圚したせん。★

リ゜ヌス

Salesforce ヘルプで Trailhead のフィヌドバックを共有しおください。

Trailhead に぀いおの感想をお聞かせください。[Salesforce ヘルプ] サむトから新しいフィヌドバックフォヌムにい぀でもアクセスできるようになりたした。

詳现はこちら フィヌドバックの共有に進む