SalesforceでAngularJSを使う場合の二重HTMLエスケープを回避する方法

イシュー

  • Salesforceでリモートアクションを使用すると、戻り値のJSONは、HTMLエスケープされている
  • AngularJSで使用する変数は、HTMLエスケープされて出力される。
  • つまり、Salesforceで取得したJSONの値をAngularJSでそのまま出力すると、2重にHTMLエスケープされてしまう。

参考

二重エスケープを回避するには

  • リモートアクションのパラメータに{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}
);