我有一个Visualforce页面,嵌入在商机的详细信息页面中。
在页面中是一个命令按钮,用于调用后备控制器扩展中的方法。
支持方法完成后,如何将用户重定向到另一个页面?
我可以从方法返回一个PageReference,但它只会重定向显示嵌入式Visualforce页面的iframe。
理想情况下,我想刷新顶级窗口,但我担心如果嵌入式visualforce页面与父窗口不在同一个域中,则可能存在跨域问题。
作为基本测试,我尝试将以下内容添加到嵌入式Visualforce页面中:
<script>
window.setTimeout(testRedirect,2000);
function testRedirect() {
top.location.reload();
}
</script>
这导致Chrome记录错误:
不安全的JavaScript尝试使用URL访问框架 来自带框架的框架https://na2.salesforce.com/006400000000000 https://ab2.na2.visual.force.com/servlet/servlet.Integration?lid=066400000000000&ic=1。 域,协议和端口必须匹配。
因此,Visualforce页面的域名不同。
答案 0 :(得分:14)
这是一些代码,但这适用于所有浏览器,我没有遇到任何类型的跨域错误。
控制器扩展:
public class Opp_Ext {
private ApexPages.StandardController stdController;
public String redirectUrl {public get; private set;}
public Boolean shouldRedirect {public get; private set;}
public Opp_Ext(ApexPages.StandardController stdController) {
this.stdController = stdController;
shouldRedirect = false;
}
public PageReference doStuffAndRedirect() {
shouldRedirect = true;
redirectUrl = stdController.view().getUrl();
return null;
}
}
VF页面:
<apex:page standardController="Opportunity" extensions="Opp_Ext" >
<apex:form >
<apex:commandButton value="Do Stuff" action="{!doStuffAndRedirect}" rerender="redirectPanel" />
<apex:outputPanel id="redirectPanel" >
<apex:outputText rendered="{!shouldRedirect}">
<script type="text/javascript">
window.top.location.href = '{!redirectUrl}';
</script>
</apex:outputText>
</apex:outputPanel>
</apex:form>
</apex:page>
答案 1 :(得分:0)
尝试使用PageReference Class
另外setRedirect也很有用
示例:
public class mySecondController {
Account account;
public Account getAccount() {
if(account == null) account = new Account();
return account;
}
public PageReference save() {
// Add the account to the database.
insert account;
// Send the user to the detail page for the new account.
PageReference acctPage = new ApexPages.StandardController(account).view();
acctPage.setRedirect(true);
return acctPage;
}
}
答案 2 :(得分:-1)
您需要使用oncomplete = "window.top.location.href = '{!'/'+obj.id}';"