我有一个Visualforce页面,嵌入在Opportunities的详细信息页面上.
在页面内是一个命令按钮,用于调用后备控制器扩展中的方法.
支持方法完成后,如何将用户重定向到另一个页面?
我可以从方法返回一个PageReference,但它只会重定向显示嵌入式Visualforce页面的iframe.
理想情况下,我想刷新顶级窗口,但我担心如果嵌入式visualforce页面与父窗口不在同一个域中,则可能存在跨域问题.
作为基本测试,我尝试将以下内容添加到嵌入式Visualforce页面:
<script>
window.setTimeout(testRedirect,2000);
function testRedirect() {
top.location.reload();
}
</script>
Run Code Online (Sandbox Code Playgroud)
这导致Chrome记录错误:
不安全的JavaScript尝试与URL访问框架 https://na2.salesforce.com/006400000000000从框架与URL https://ab2.na2.visual.force.com/servlet/servlet.Integration?lid=066400000000000&ic=1.域,协议和端口必须匹配.
因此,Visualforce页面的域名不同.
我有一个Visualforce页面使用自定义控制器,用于编辑机会下的多个记录.
我想创建一个从Opportunities到此Visualforce页面的自定义按钮或链接.
目前链接如下:
/apex/ExamplePage?oppId={!Opportunity.Id}
Run Code Online (Sandbox Code Playgroud)
这在开发沙箱中工作正常,但是当它作为托管包的一部分部署时,链接会断开,因为页面引用没有名称空间前缀.
我在Force.com讨论板上发现了托管包重定向问题,暗示应该可以使用$ Page来引用URL中的Visualforce页面.例如
{!URLFOR($Page.MyExamplePage,'',[objectId = campaign.id])}
Run Code Online (Sandbox Code Playgroud)
但这样做只会给我语法错误:
错误:字段$ Page.MyExamplePage不存在.检查拼写.
该帖子的另一部分建议使用Apex类和Execute Javascript来解决它.但在我看来,这只是将名称空间问题转移到了Javascript中.
如何安全地引用Visualforce页面以在托管包内外工作?