iframe - redireccionar - redirigir index a otra pagina
Visualforce Page incrustado en una página de detalles que necesita redirigir a otra página (3)
Tengo una página de Visualforce que está incrustada en la página de detalles de Oportunidades.
Dentro de la página hay un botón de comando que invoca un método en la extensión del controlador de respaldo.
Una vez que se completa el método de respaldo, ¿cómo puedo redirigir al usuario a otra página?
Puedo devolver una PageReference del método, pero solo redireccionará el iframe en el que se muestra la página de Visualforce incrustada.
Idealmente, me gustaría actualizar la ventana de nivel superior, pero me preocupa que pueda haber problemas de dominio cruzado si la página de fuerza visual incrustada no está en el mismo dominio que la ventana principal.
Como prueba básica intenté agregar lo siguiente a la página incrustada de Visualforce:
<script>
window.setTimeout(testRedirect,2000);
function testRedirect() {
top.location.reload();
}
</script>
Esto ocasionó que Chrome registrara el error:
JavaScript inseguro intenta acceder al marco con URL https://na2.salesforce.com/006400000000000 desde el marco con URL https://ab2.na2.visual.force.com/servlet/servlet.Integration?lid=066400000000000&ic=1 . Deben coincidir los dominios, protocolos y puertos.
Entonces los dominios difieren para la página de Visualforce.
Es un poco más código, pero esto funciona para mí en todos los navegadores, y no estoy recibiendo ningún tipo de error entre dominios.
Extensión del controlador:
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;
}
}
Página 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>
Intenta usar la clase PageReference
Además setRedirect será útil
Muestra:
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;
}
}
oncomplete = "window.top.location.href = ''{!''/''+obj.id}'';"
utilizar oncomplete = "window.top.location.href = ''{!''/''+obj.id}'';"