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页面中的merge字段,不需要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 回答