[salesforce]VisualforcePageとsalesforce標準ページはクロスドメイン

By |5月 22, 2013|Javascript, salesforce, Salesforce.com, |


VisualforcePageとsalesforce標準ページを絡めた開発はクロスドメインになってしまうため思わぬことでハマることがよくあります。

忘れがちですがVisualforcePageのドメインは「[インスタンス名].visual.force.com」でsalesforce標準ページは「[インスタンス名].salesforce.com」というように異なります。

したがって両ページ間はクロスドメインになりますのでクライアント側でjavascriptを使って色々やってるとブラウザの制約と格闘することになります。

最も単純な例ですとVisualforcePageからsalesforce標準ページをポップアップで開いた際にポップアップウィンドウ(子ウィンドウ)が閉じた事をVisualforcePage(親ウィンドウ)が検知できないなどです。

あと、あまり遭遇しないですが、VisualforcePageからSalesforce標準ページへ相対パスで遷移した場合に「[インスタンス名].visual.force.com」から「[インスタンス名].salesforce.com」へのリダイレクトを挟んでしまってハマることがあります。

具体的な例としてVisualforcePageからsalesforce標準のToDo登録ページへGETパラメータで値を引き渡すようなことはよくやると思いますが、たとえばToDoのコメント欄の値に改行が入っていると改行が削除された状態でToDo登録ページのコメント欄に値がセットされてしまいます。

こういう場合はApexのURL.getSalesforceBaseUrl()などでインスタンス名を取得して絶対パスを動的に生成し遷移させれば(リダイレクトを挟まないようにする)回避できます。