0

簡単なvfページを作成し、vfページに小さなjQueryスクリプトを配置しました(コードの下)。この vf ページをケースの詳細ページにインライン VF ページとして追加しました。jQuery では、ケース番号が存在する div の ID を渡し、結果を警告することで、ケース番号を取得しようとしています。しかし、空白のポップアップが表示されます。しかし、jQuery をサイドバーに配置して同じことを試してみると、問題なく動作します。

<apex:page standardController="Case">
<script src="/resource/jQueryLatest" type="text/javascript"></script>
<script type="text/javascript">
j$(document).ready(function(){
    var caseNumber = j$("#cas2_ileinner").text();
    alert(caseNumber);
});
</script>
</apex:Page>

問題: 同じページのインライン vf ページに配置された jQuery スクリプトから、標準の詳細ページの DOM 要素にアクセスできません。

助けてください!

よろしくサム

4

1 に答える 1

2

うん、それは「期待どおりに動作します」。Visualforce が別のドメイン (*.visual.force.com) から提供されており、ブラウザがクロスサイト Javascript を防止しています。

代わりに VF ページの差し込みフィールドを使用してください。それを取得するために JS は必要ありません :)

var caseNumber = '{!Case.CaseNumber}';

編集:

セクションヘッダーに静的リソースを埋め込む厄介なトリック:

タグやスタイルなどを含まない、純粋な JavaScript コードを含む静的リソースが必要です。

alert('Hello StackOveflow!'); //is OK,
<script>alert('Hello StackOveflow!');/* is not OK */</script>

次に、ページ ブロック セクション名でそれを参照するだけです。ページ レイアウト エディタ

考慮事項:

  1. 依存関係がある場合 (最初に jQuery をロードし、次にそれに依存するコード)、2 つのセクション ヘッダーを使用するのが最善だと思います (jQuery コードの後に​​コードを配置することもできますが、再利用可能なライブラリの目的が無効になります)。チェックボックスを使用して、いつ表示するかを制御します。
  2. これらのセクションを「詳細」の一番下に配置するのが最善です - それらは少し見苦しく (特に編集ページでは)、ページ上のフィールドを参照したい場合は、フィールドがすでに読み込まれている必要があります。
  3. Javascript は、静的リソースに記述されているとおりに注入されます。{!megefields}構文は、サーバー側で期待する値に置き換えられません。
于 2012-11-06T15:35:17.993 に答える