SalesforceでAngularJSを使う場合の二重HTMLエスケープを回避する方法
イシュー
- Salesforceでリモートアクションを使用すると、戻り値のJSONは、HTMLエスケープされている
- AngularJSで使用する変数は、HTMLエスケープされて出力される。
- つまり、Salesforceで取得したJSONの値をAngularJSでそのまま出力すると、2重にHTMLエスケープされてしまう。
参考
- visualforce - Decoding HTML String built in the controller - Salesforce Stack Exchange
- RemoteAction Annotation | Force.com Apex Code Developer's Guide | Salesforce Developers
- RemoteActionのパラメータにconfigulation({escape: false}を渡すことにより、HTMLエスケープを行わない設定をすることができる
- Remoting with multiple arguments using Visualforce.remoting.Manager.invokeAction - Salesforce Developer Community
二重エスケープを回避するには
- リモートアクションのパラメータに{escape: false}を与えて呼び出し
- リモートアクションの返り値をAngularの変数で受け取る
- (Angularの変数を表示する際はデフォルトでHTMLエスケープされる)
[namespace.]controller.method(
[parameters...,]
callbackFunction,
[configuration]
);
FooPackage.BarController.baz( function(result, event){ if(event.status) { // success $scope.hoge = result; $scope.$apply(); } else { // failed } }, {escape: false} );