LoginSignup
3
1

More than 5 years have passed since last update.

Salesforce 静的リソースのJavaScriptでグローバル変数を扱う

Posted at

結論

 グローバル変数、Apex変数などをjavascript(以降js)に埋め込んで処理したい時(コンポーネントのidなど)に、jsが静的リソースにあるとページがレンダリングされた時にグローバル変数は展開されずに、ただの文字列としてレンダリングされます
 つまり、静的リソース内のjsでグローバル変数を扱えない

理由

 Visualforceページは動的ページで、ページがレンダリングされる時にグローバル変数、Apex変数などはブラウザが解釈できるHTMLタグに変換される
 なので、Visualforce外のJavaScript内(静的リソースのjs)に含まれているApex変数やグローバル変数は展開されずに、そのまま文字列としてページにレンダリングされます

対策方法

1. グローバル変数の外だし

visualforceでしかグローバル変数やApex変数を展開できないので、静的リソースを読み込む前にjsの変数にグローバル変数を代入する

visualforce.page

<script>
var componentFormId = "{!$Component.form.xxx}";
</script>
<script src="静的リソースのhogehoge.js"></script>

静的リソース内のjsでは上記のcomponentFormId変数ありきで実装する

hogehoge.js

document.getElementById(componentFormId).value;

2. visualforceにjavascriptをまとめる

  • 静的リソースを使わずにvisualforceにjavascriptをまとめる
  • visualforceのincludeを使って、javascriptのみが書かれたvisualforceを読み込む(静的リソースのような使い方)
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1